• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    ネストする集成体初期化における波カッコ省略を許可 [N3653]

    このページはC++14に採用された言語機能の変更を解説しています。

    のちのC++規格でさらに変更される場合があるため関連項目を参照してください。

    概要

    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};
    

    参照