ホームページ  >  記事  >  バックエンド開発  >  C コンパイラがデフォルトの関数引数からテンプレート型パラメータを推定できないのはなぜですか?

C コンパイラがデフォルトの関数引数からテンプレート型パラメータを推定できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-05 07:55:02441ブラウズ

Why Can't C   Compilers Deduce Template Type Parameters from Default Function Arguments?

なぜコンパイラはデフォルトの関数引数からテンプレート型パラメータを差し引くことができないのですか?

一見論理的な仮定にもかかわらず、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 サイトの他の関連記事を参照してください。

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