クラス内メンバ変数の初期化順序には規約がある

クラスのメンバ変数は初期化順序が規約により決まっています。

例えば以下のクラスのメンバ変数はどの順番で初期化されるでしょうか?

class T
{
    int a;
    int b;
    int c;

    T() : c(5), a(2), b(4) { };
};



答えはa,b,cの順序です。

宣言された順番に作成され、その逆順で破棄される。

意外と知られてないらしい。

Leave a Reply

2 Comments on "クラス内メンバ変数の初期化順序には規約がある"

Notify of
avatar
Sort by:   newest | oldest | most voted
proger
Guest

上のように書くとgcc(g++)だとコンパイル時に警告してくれますね(要 -Wall or -Wreorder)。

konuma
Guest

なるほど、親切に警告してくれるコンパイラもあると。
VC(2003)は見事にシカトしてくれました。

wpDiscuz