Re[4]: Вопрос по value-initialization
От: Лазар Бешкенадзе СССР  
Дата: 20.05.17 07:39
Оценка:
Здравствуйте, 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';
}


Согласись это весело.
Отредактировано 20.05.2017 7:51 Лазар Бешкенадзе . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.