次の方法でペア オブジェクトを作成できない理由:
pair<int,int> p1 = {0,42}
C++03 では使用する必要があります
std::make_pair(0, 42);
ペアは単純なデータ構造ではないためです。またはペアのコンストラクターを呼び出すことにより、つまり
std::pair<int, int> p1(0, 42);
C++11で
pair<int, int> p1 = {0, 42}
大丈夫だ。
C++03 では初期化子リスト構文は許可されていません。これは が集計std::pair
ではないためです。したがって、有効な初期化方法はコンストラクター呼び出しです。
C++ 標準 (C++03 8.5.1 §1) からの正式な定義:
集合体は、ユーザーが宣言したコンストラクター (12.1)、プライベートまたは保護された非静的データ メンバー (条項 11)、基本クラス (条項 10)、および仮想関数 (10.3) を持たない配列またはクラス (条項 9) です。 )。
詳細な説明については、FAQをお読みください。
の導入により、C++11 で変更が加えられましたstd::initializer_list
。