なぜコンパイラはデフォルトの関数引数からテンプレート型パラメータを差し引くことができないのですか?
一見論理的な仮定にもかかわらず、C コンパイラはテンプレートを自動的に推論できませんデフォルトの関数引数からの型パラメータ。これは、明確な理由により、C 03 と C 11 の両方に当てはまります。
C 03 では、コンパイラの機能不全は、明示的な言語仕様 (§14.8.2/17) に起因します。関数のデフォルト引数の型から推定されます。"
C 11 では、デフォルトのテンプレート引数を指定できますが、明示的に指定する必要があります。デフォルトの関数の引数自体は、テンプレート引数の推論には使用できないままです:
<code class="cpp">void bar(int a, T b = 0.0f) { } // C++11</code>
C 11 標準 (14.8.2.5/5) では、次のような非推論コンテキストが定義されています。
その結果、明示的な規定が多くの場合、コンパイル エラーを避けるためにデフォルトのテンプレート引数が必要になります。
以上がC コンパイラがデフォルトの関数引数からテンプレート型パラメータを推定できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。