В C ++ 03 тип POD инициализируется по умолчанию, если () опущен, в противном случае он инициализируется значением.
Это не совсем то, что происходит.Согласно спецификации C ++ 03, раздел 8.5 / 9, если для нестатического объекта типа POD не указан инициализатор, то он и его подобъекты «имеют неопределенное начальное значение».То есть не то же самое, что и инициализация по умолчанию.Инициализация по умолчанию - это то же самое, что и инициализация значения для POD-типа, что означает, что объект инициализируется нулями (8.5 / 5), но это может произойти только при наличии пустого инициализатора (то есть пустых скобок).согласно 8.5 / 7).Таким образом, вы можете только по умолчанию и / или инициализировать значение POD-типа с пустым инициализатором.Инициализация по умолчанию для нестатического POD-типа не происходит, если не указан инициализатор.
Во втором примере с не-POD-типом, который имеет определяемый пользователем конструктор, по умолчанию инициализация по умолчанию будет выполняться технически.поместите, если вы пропустили символы-инициализаторы (круглые скобки).Другими словами:
bar* ptr_a = new bar; //default initialization
bar* ptr_b = new bar(); //value initialization
Имейте в виду, что для структур, не относящихся к POD, или для типов классов, если есть определяемый пользователем конструктор, инициализация по умолчанию и инициализация значения, согласно 8.5 / 5,оба вызывают определяемый пользователем конструктор.Таким образом, в конце концов, с типом bar
в том виде, в каком вы его объявили, инициализация по умолчанию и значение заканчивают тем же.