提供されたコード内のデフォルトの関数引数からコンパイラがテンプレート引数を推定できないのは、C 言語の規定に起因する可能性があります。
C 03 では、仕様の §14.8.2/17 で引用されているように、「テンプレートの型パラメータは関数のデフォルト引数の型から推定することはできません。」この制限により、テンプレート パラメーターの推論にデフォルトの引数を使用することが明示的に禁止されています。
C 11 では関数テンプレートのデフォルトのテンプレート引数を指定できる機能が導入されましたが、デフォルトの関数の引数は依然としてテンプレート引数の推論には使用できません。具体的には、C 11 §14.8.2.5/5 には、「推定されないコンテキストは次のとおりです。 ... 引数の呼び出しで使用されているデフォルト引数を持つ関数パラメータのパラメータ型で使用されるテンプレート パラメータ"
したがって、提供されたコードがデフォルトの引数 0.0f から T のテンプレート パラメーターを推定できないことは、言語仕様と一致しています。この問題を解決するには、次の修正されたコードに示すように、bar 関数を呼び出すときに明示的なテンプレート引数を指定する必要があります:
a.bar<float>(5);
以上がC がデフォルトの関数引数からテンプレート パラメータを推定できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。