7

後者を使用することに欠点はありますか?より用途がstd::make_pair広い/互換性がありますか、それとも本当に互換性がありますか?

ありがとう!

4

1 に答える 1

8

それらはどのように関連していますか?pair初期化子リストコンストラクターは、が異種型であるため、ペアでは機能しませんが、初期化子リストコンストラクターはinitializer_list<T>、同種型の初期化子リストを取得するためにのみ使用できる、を使用します。

(仕様を見ると、実際には「初期化リストコンストラクター」ではなく「初期化子リストコンストラクター」と呼ばれる必要があります。本当に最初のコンストラクターを参照するつもりですか?そうでない場合は、何を参照しますか?)

std::pair<>を使用して使用するのではなく、初期化子リストを使用して初期std::make_pair化することを参照するだけであればauto、どちらも問題ないと思います。

auto p = std::make_pair(a, b);
std::pair<A, B> p{a, b};

すでに型がAありB、それらをに使用できる場合はpair、初期化子リストを使用するのが良い方法です。そうでない場合は、それmake_pairは良いことかもしれません。型ABがあり、それらがすでに適切に変換されているかどうかわからない場合(つまり、配列型や関数型であってはならず、おそらく非参照型にする必要がある場合)、使用する方が簡単な場合がありますstd::make_pair。これにより、式の型が適切に減衰します。

于 2011-03-13T15:53:33.467 に答える