提供された C コードでは、テンプレート関数 cal_size が配列参照引数のサイズを出力します。テンプレート パラメーター N が、渡された配列の長さをどのように自動的に反映するのかは興味深いです。
N は初期化された変数ではありません。これはコンパイル時の定数です。テンプレート引数推論として知られるプロセスを通じて、T と N の両方がテンプレート関数に渡された引数から推論されます。
次の cal_size の呼び出しを考えてみましょう:
void cal_size_int_6(int (&a)[6]) { std::cout << "size of array is: " << 6 << std::endl; }
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 サイトの他の関連記事を参照してください。