C 11 では、std::make_pair は 2 つの引数 (右辺値への参照) を取ります ( T&& および U&&)。ただし、呼び出し時にテンプレート パラメーターを明示的に指定すると、引数の推定ができなくなり、関数テンプレート宣言内で右辺値参照が置換されます。この不一致により、左辺値引数が右辺値参照にバインドできないため、コンパイル エラーが発生します。
明示的に提供されたテンプレート引数 (例: std) で std::make_pair を使用しようとしました。 ::make_pair
テンプレート内の右辺値参照パラメータには、テンプレート型の任意のインスタンスにバインドする独自の機能があります。
std::make_pair の呼び出し中にテンプレート引数が省略された場合、テンプレート引数の推定が行われます。コンパイラは、指定された引数 (この場合は std::string と int) からテンプレートの型を推測します。右辺値参照パラメーター (T&& および U&&) は、それぞれ std::string& および int&& として推定されます。 T の結果として得られるテンプレート引数は折りたたまれ、余分な参照が削除され、lvalue 引数 (std::string) へのバインドが可能になります。
このようなエラーを回避するには、次のことを控えてください。必要な場合を除き、std::make_pair のテンプレート引数を明示的に指定します。コンパイラが引数の推論を実行できるようにすると、通常は望ましい動作が得られます。予期しない結果が発生した場合は、明らかなコンパイル エラーが問題の特定に役立ちます。
以上が`std::make_pair` でテンプレート パラメーターを明示的に指定すると、C 11 でコンパイル エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。