Стандарт гласит (8.5/5
)
Инициализация по умолчанию объекта типа T означает:
- если T является типом класса, отличным от POD (пункт 9) вызывается конструктор по умолчанию для T (и инициализация некорректна, если нет доступного конструктора по умолчанию);
- если T является типом массива, каждый элемент инициализируется по умолчанию;
- иначе, объект инициализируется нулями .
.
Инициализация значения объекта типа T означает:
- если T является типом класса (раздел 9) с конструктором, объявленным пользователем (12.1), то вызывается конструктор по умолчанию для T (и инициализация некорректна, если у T нет доступного конструктора по умолчанию);
- если T является типом класса без объединения без конструктора, объявленного пользователем, то каждый нестатический член данных и компонент базового класса T инициализируется значением;
- еслиT является типом массива, тогда каждый элемент инициализируется значением;
- другоеrwise, объект инициализируется нулем
.
Определено ли значение, которое он получает для реализации, или оно одинаково для всех реализаций?
Таким образом, значение будет одинаковым для всех реализаций.
Struct
- это тип не POD, поэтому
Struct *a =new Struct; // default initialization
//memberVariable will be initialized to 0 because if T is a non-POD class type
//the default constructor for T is called
Struct *b = new Struct(); //value initializes Struct, which calls the default ctor.
//memberVariable will be initialized to 0 in this case also.
РЕДАКТИРОВАТЬ :
Как заметил @Johannes, переменная-член примитивного типа (int, bool, float, enum, pointer) является value-initialized
, а не default initialized
.