ホームページ >バックエンド開発 >C++ >テンプレート引数の推論は C の配列サイズをどのように決定しますか?

テンプレート引数の推論は C の配列サイズをどのように決定しますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-05 12:12:14910ブラウズ

How Does Template Argument Deduction Determine Array Sizes in C  ?

テンプレート引数の推定により配列サイズを明らかにする方法

提供された C コードでは、テンプレート関数 cal_size が配列参照引数のサイズを出力します。テンプレート パラメーター N が、渡された配列の長さをどのように自動的に反映するのかは興味深いです。

テンプレート引数の推定

N は初期化された変数ではありません。これはコンパイル時の定数です。テンプレート引数推論として知られるプロセスを通じて、T と N の両方がテンプレート関数に渡された引数から推論されます。

次の cal_size の呼び出しを考えてみましょう:

  • 配列の場合(長さ 6): コンパイラは T を int として、N を 6 として推定します。 function:
void cal_size_int_6(int (&a)[6]) {
  std::cout << "size of array is: " << 6 << std::endl;
}
  • b 配列 (長さ 1) の場合: ここでも、コンパイラーは T を int として推論し、N を 1 として推論し、別の特殊な関数を生成します:
void cal_size_int_1(int (&a)[1]) {
  std::cout << "size of array is: " << 1 << std::endl;
}

個別の関数呼び出し

基本的に、cal_sizeテンプレートは、N と T のハードコードされた値を持つ個別の特殊な関数に変換されます。メイン関数は次と等価になります。

int main() {
  cal_size_int_6(a);
  cal_size_int_1(b);
}

要約すると、テンプレート引数の推定により、テンプレートは引数の型から配列サイズを推定できるようになります。基礎となるメカニズムには、引数の型の一意の組み合わせごとに特殊な関数を生成することが含まれており、それぞれが独自の静的に決定された N 値と T 値を持ちます。

以上がテンプレート引数の推論は C の配列サイズをどのように決定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。