最終更新日時: 2025年07月10日 10時26分30秒 (JST)
Koichi Murase が更新

履歴 編集

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

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

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

## 概要

C++11で導入されたメンバ初期化子は集成体の初期化と組み合わせて使用することができない問題があった。

C++11で不適格となる以下のコードは、C++14では適格となる：

    #include <string>

    struct Univ {
      std::string name;
      int rank;
      std::string city = "unknown";
    };

    int main()
    {
      Univ u = {"Columbia", 10};             // OK: city=="unknown"
      Univ v = {"Columbia", 10, "New York"}; // OK
    }

## 仕様

- 集成体の定義として「非静的メンバ変数の初期化をもたない」ことが条件になっていたが、それを削除

## 関連項目

- C++11 非静的メンバ変数の初期化

## 参照

- N3653 - Member initializers and aggregates