ホームページ > バックエンド開発 > C++ > C 11 で明示的なテンプレート パラメーターを使用すると `std::make_pair` が失敗するのはなぜですか?

C 11 で明示的なテンプレート パラメーターを使用すると `std::make_pair` が失敗するのはなぜですか?

DDD
リリース: 2024-12-16 16:58:17
オリジナル
877 人が閲覧しました

Why Does `std::make_pair` Fail with Explicit Template Parameters in C  11?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート