関数テンプレートを検討します。
template<typename T> void printme(T&& t) { for (auto i : t) std::cout << i; }
この関数は、begin を持つ型の 1 つのパラメーターを期待します。 () と end() function.
質問:
次の呼び出しはなぜ違法ですか?
printme({'a', 'b', 'c'});
答え:
printme({'a', 'b', 'c'}) の呼び出しは不正です。テンプレート引数 T は推論できません。テンプレート引数を明示的に指定しないと、begin() 関数と end() 関数を使用すると任意の型になる可能性があるため、コンパイラはパラメーターの型を決定できません。この問題は、次の場合には発生しません:
これの例外は、auto の控除です。 std::initializer_list
以上がC テンプレートの型推定において `printme({\'a\', \'b\', \'c\'});` が違法なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。