Здравствуйте, jazzer, Вы писали:
J>Вообще-то, B() — это и есть явная инициализация.
Вообще-то с самого начала это было просто вызовом default конструктора. Но уже тогда просматривался будущий идиотизм потому что вместо того чтобы int() считать неинициализированным объектом типа int его объявили просто нулем — 0.
Вообще-то value initialization была введена только в 2003 но тогда хоть оставили лазейку чтобы от этой медвежьей услуги отказаться.
Вообще-то теперь это уже пипец.
J>Если хотите без инициализации, то пишите так:
J>J>B b;
J>std::cout << b.a.i << '\n';
J>
Вообще-то меня уже зае...о переписывать с появлением нового стандарта.
Вообще-то твой совет не поможет если нужен временный объект.
Вообще-то разумно это считать вызовом default конструктора, если B(5) считается вызовом конструктора B(int).
Вообще-то я не удивлюсь если сейчас все обнуляют и в этом случае.
Вообще-то в твоем примере объект будет висеть до конца блока что не совсем то же самое и чтобы сделать похоже на то что в оригинале надо сделать так:
{
B b;
std::cout << b.a.i << '\n';
}
Согласись это весело.