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

C 11 の「make_pair」でテンプレート パラメータを明示的に指定するとコンパイルに失敗するのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-21 11:43:17
オリジナル
190 人が閲覧しました

Why Does Explicitly Specifying Template Parameters in C  11's `make_pair` Fail to Compile?

明示的なテンプレート パラメーターを使用した 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 サイトの他の関連記事を参照してください。

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