C 11 make_pair が明示的なテンプレート パラメーターで失敗する
問題:
g 4.7 を使用する場合-std=c 11 を有効にすると、次のコードは失敗します。コンパイル:
std::pair<std::string, int>& b = std::make_pair<std::string, int>(s, 7);
make_pair 関数が存在するにもかかわらず、コンパイラはエラーを出します。
説明:
std::make_pair が意図されています。テンプレートパラメータを明示的に指定せずに使用できます。 C 11 では、2 つの右辺値参照引数 T&& と U&& を受け取ります。ここで、T と U はテンプレート型パラメーターです。ただし、テンプレート引数を明示的に指定すると、予期される右辺値参照と指定された左辺値引数 (コード例の ) の間に不一致が生じます。
その結果、コンパイラーは次のように報告します。
error: no matching function for call to ‘make_pair(std::string&, int)’
テンプレート引数が明示的に指定されていない場合、テンプレート引数の推定が行われます。これにより、関数の引数として現れるときに、右辺値参照テンプレート パラメーターを左辺値にバインドできるようになります。テンプレート引数のない std::make_pair の場合、コンパイラは T が std::string& であり、U が int であると推測し、s と 7 を関数の引数に正常にバインドします。
解決策:
std::make_pair の推奨される使用法は、テンプレート引数を省略し、テンプレート引数に依存することです。控除。このルールに従うことで、コンパイラは引数の一致を正しく処理し、コンパイル エラーを回避します。
以上がC 11 で明示的なテンプレート パラメーターを使用すると `std::make_pair` が失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。