Какие из классов B1, B2, B3 определены неправильно?
#include <iostream>
struct A{
int val;
A(int v): val(v){}
};
struct B1{
A a1,a2;
B1(): a1(4), a2(a1.val){}
};
struct B2{
A a1,a2;
B2(): a2(a1.val), a1(4){}
};
struct B3{
A a2,a1;
B3(): a1(4), a2(a1.val){}
};
main(){
B1 b1;
B2 b2;
B3 b3;
std::cerr << b1.a2.val << "\n"
<< b2.a2.val << "\n"
<< b3.a2.val << "\n";
}
забавно, что такими играми можно случайно получить доступ к объекту до выполнения его конструктора, а компилятор (gcc-4.4.3) ничего не заметит...
realtim: такой порядок инициализации членов объясняется тем, что конструкторов может быть несколько и у них будет разный порядок инициализаторов членов; а так как общий принцип -- разрушать всё в обратном порядке, то инициализация происходит в порядке описания. Странно, что при этом можно в списке инициализаторов использовать члены класса для вычисления значений.