明示的なテンプレート パラメーターを使用した C 11 make_pair のコンパイルに失敗する
C 11 では、make_pair 関数は次のペアの作成を容易にするように設計されています。指定されたデータ型。ただし、関数呼び出しでテンプレート パラメーターを明示的に指定すると、コンパイル エラーが発生する可能性があります。
make_pair 関数は、テンプレート構文に従います。
template<typename T, typename U> make_pair(T&& argT, U&& argU);
この構文は、make_pair が 2 つの右辺値参照を受け入れることを示します。 argT と argU を取得し、指定されたパラメータからテンプレート タイプ パラメータ T と U を推定します。 argument.
次のようにテンプレート引数を明示的に指定する場合、
std::make_pair<std::string, int>(s, 7);
右辺値参照パラメーターが期待されます。ただし、渡された lvalue 引数 s はこの要件を満たしていません。したがって、コンパイラは、引数の型と右辺値参照パラメータの型の間の一致を確立できません。
対照的に、テンプレート引数が省略された場合、コンパイラはテンプレート引数の推論を実行し、これにより s が T に正常にバインドされます ( std::string&) と 7 から U (int&&)。このプロセスは、左辺値または右辺値のステータスに関係なく、同じテンプレート パラメータの任意の型にバインドできる、テンプレート パラメータ内の右辺値参照の固有の動作によって容易になります。
エラーを解決するには、単に明示的なパラメータを省略します。テンプレートパラメータの指定。
以上がC 11 の「make_pair」でテンプレート パラメータを明示的に指定するとコンパイルに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。