ホームページ > バックエンド開発 > C++ > `std::make_pair` でテンプレート パラメーターを明示的に指定すると、C 11 でコンパイル エラーが発生するのはなぜですか?

`std::make_pair` でテンプレート パラメーターを明示的に指定すると、C 11 でコンパイル エラーが発生するのはなぜですか?

Susan Sarandon
リリース: 2024-12-13 01:54:16
オリジナル
1038 人が閲覧しました

Why Does Explicitly Specifying Template Parameters in `std::make_pair` Cause Compilation Errors in C  11?

C 11 でテンプレート パラメーターを明示的に指定すると std::make_pair がコンパイルできない

C 11 では、std::make_pair は 2 つの引数 (右辺値への参照) を取ります ( T&& および U&&)。ただし、呼び出し時にテンプレート パラメーターを明示的に指定すると、引数の推定ができなくなり、関数テンプレート宣言内で右辺値参照が置換されます。この不一致により、左辺値引数が右辺値参照にバインドできないため、コンパイル エラーが発生します。

コンパイル エラーの根本原因

明示的に提供されたテンプレート引数 (例: std) で std::make_pair を使用しようとしました。 ::make_pair()) により、予想される右辺値間の不一致が発生します参照と実際の左辺値引数 (std::string)。

テンプレートにおける右辺値参照の役割

テンプレート内の右辺値参照パラメータには、テンプレート型の任意のインスタンスにバインドする独自の機能があります。

テンプレートが省略された場合のコンパイラの動作パラメータ

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

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