読者です 読者をやめる 読者になる 読者になる

non-static data member initializer と初期化子リストの優先度

C++11 からデータメンバ宣言場所で非静的メンバの初期化が出来るようになりましたが,この初期化は初期化子リストによる初期化が省略されたときのみ行われます.

#include <iostream>

struct X{
    int const i = 42;

    X(){} // 初期化子リスト無し

    X(char) : i(-42){} // 初期化子リスト有り
};

int main()
{
    X x1{}; // 初期化子リスト無し
    std::cout << x1.i << '\n'; // 42

    X x2{'a'}; // 初期化子リスト有り
    std::cout << x2.i << '\n'; // -42

    return 0;
}