Quote:
Originally posted by Agregat
VC, выполняет не так как я это ожидаю... он сначала инициализирует член D, а потом вызывает конструктор B, что не есть верно (на мой взгляд).
|
а что ему остается делать, раз ты это заказал
![Smilie](https://forum.armkb.com/images/smilies/smile.gif)
кстати, это уже не инициализация, а присваивание.
а после этого он производит уже инициализацию, а поскольку в моем примере ничего не написано, то инициализацию по умолчанию, что оставляет значение указателя неизменным (в случае данного компилятора). эффект проявится, если вместо указателя взять тип с двумя конструкторами, один из которых - по умолчанию, и сделать так:
struct S
{
S(int i = 0): i_(i) {}
int i_;
};
struct B
{
B(S* ps): ps_(ps)
{
cout << ps_->i_;
}
S* ps_;
};
struct D: B
{
D(): B(&(s_ = S(8)))
{
cout << s_.i_;
}
S s_;
};
int
main()
{
D d;
return 0;
}
но стандарт все же ничего не сказал о том, насколько правильно такое присваивание - обязан ли компилятор его обругать или нет...