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を出力します。