Разница между инициализацией по умолчанию и инициализацией значения?

Возможный дубликат:
Что означают следующие слова в С++: нуль, инициализация по умолчанию и значение?

Я читал этот ответ, поэтому я натолкнулся на второе слово: value-initialize. Первоначально я думал, что это то же самое, что и default-initialize, но контекст подсказывает мне, что я ошибаюсь.

Итак, мой вопрос:

В чем разница между инициализацией по умолчанию и инициализацией значения?

Я хотел бы понять разницу с некоторыми примерами.

Ответ 1

В соответствии со стандартом (8.5/4,5):

В default-initialize объект типа T:
- если T не является POD тип класса конструктор по умолчанию для T называется (и инициализация плохо сформированный, если T не имеет доступного конструктор по умолчанию); - если T является тип массива, каждый элемент по умолчанию инициализируется;
- в противном случае объект инициализируется нулем.


В значение-инициализировать объект типа T:
- если T - тип класса (раздел 9) с объявленным пользователем конструктор (12.1), то по умолчанию конструктор для T называется (и инициализация плохо сформирована, если T имеет нет доступного конструктора по умолчанию); - если T - неединичный тип класса без объявленный пользователем конструктор, тогда каждый нестатический элемент данных и компонент базового класса T Значение инициализирован; 96)
- если T является массив, то каждый элемент Значение инициализируется;
- в противном случае объект инициализируется нулем

Ответ 2

"default-initialise" дает ему значение по умолчанию, указанное стандартом, , которое может быть мусором.

"value-initialise" инициализирует его определенным значением - например, установленным в конструкторе или оптимизированным компилятором.