Namara

毎日コード。手助けなし。

2026-08-21

init_order.cpp

#include <iostream>

struct A { A() { std::cout << "A"; } };
struct B { B() { std::cout << "B"; } };

struct C {
    B b;
    A a;
    C() : a(), b() { std::cout << "C"; }
};

int main() {
    C c;
}

これは何を出力するでしょうか?

答え

BAC。メンバはメンバ初期化子リストに書かれた順序(a(), b())に関係なく、宣言された順序 — b、続いてa — で初期化されます。コンストラクタ本体は両方のメンバが存在するようになった後、最後に実行され、Cを出力します。