関数テンプレートにおけるテンプレート引数の推論について
関数テンプレート cal_size を使用して配列のサイズを計算して出力する次のコードを考えてみましょう。 :
プログラムが実行されると、正しい内容が出力されます。両方の配列のサイズ:
では、サイズが引数として明示的に渡されない場合でも、テンプレート関数 cal_size はどのようにして渡された配列のサイズを自動的に推定するのでしょうか?
答えは、C のテンプレート引数演繹の概念にあります。その仕組みは次のとおりです。
コンパイル中に、コンパイラはテンプレート引数の推論を実行し、テンプレート関数に渡された引数の実際の型に基づいて T の型と N の値を決定します。この場合、引数 a を指定して cal_size が呼び出されると、コンパイラは T を int として、N を 6 として推定し、コンパイル時に特殊な関数 cal_size_int_6 を作成します。
同様に、引数 b の場合、コンパイラは T を int として、N を 1 として推定し、特殊化が行われます。 cal_size_int_1:
したがって、元の cal_size テンプレートは、それぞれ独自のハードコードされた T 値と N 値を持つ 2 つの個別の関数特殊化を効果的に作成します。このプロセスにより、cal_size.
の呼び出しごとに正しい配列サイズが出力されるようになります。以上がC テンプレートの引数推論は関数テンプレートの配列サイズをどのように決定しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。