最終更新日時:
が更新

履歴 編集

宣言時のメンバ初期化を持つ型の集成体初期化を許可(C++14)

概要

C++11では、集成体初期化とリスト初期化の両方を含む場合、二重に波カッコを書くことが必須となっていた。そのため、publicメンバ変数として組み込み配列を持つstd::arrayクラスのオブジェクトを初期化する場合、以下のように、不要とも思える二重の波カッコを書かなければならなかった:

std::array<int, 3> ar = {{ 1, 2, 3 }}; // OK : 
//std::array<int, 3> ar = { 1, 2, 3 }; // コンパイルエラー!本当はこう書きたい

C++14ではこの制限が緩和され、内側の波カッコを省略できることになった:

std::array<int, 3> ar1 = {{ 1, 2, 3 }}; // OK : これまで通り
std::array<int, 3> ar2 = { 1, 2, 3 };   // OK : 波カッコが一組でよくなった

この変更は、多次元配列を初期化する際に通常以下のように書くものを:

int x[2][2] = {{1, 2}, {3, 4}};

以下のように内側の波カッコを省略して書けるのと同じ規則を、集成体初期化とリスト初期化の組み合わせに対しても当てはめるものである:

int x[2][2] = {1, 2, 3, 4};

参照