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

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

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

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

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



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

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

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

Leave a Reply

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

更新通知を受け取る »
avatar
並び替え:   新しい順 | 古い順 | 最も評価の多い
proger
ゲスト

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

konuma
ゲスト

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

wpDiscuz