Разница важна для POD (в основном, для всех встроенных типов, таких как int
, bool
, double
и т. Д. Плюс C-подобные структуры и объединения, построенные только из других POD), для которых существуетразница между инициализацией по умолчанию и инициализацией значения .Для POD простой
T obj;
оставит obj
неинициализированным, тогда как T()
по умолчанию инициализирует объект.Так что
T obj = T();
- это хороший способ убедиться, что объект правильно инициализирован.
Это особенно полезно в коде шаблона, где T
может быть POD или не POD типа.Когда вы знаете, что T
не является типом POD, достаточно T obj;
.
Приложение: Вы также можете написать
T* ptr = new T; // note the missing ()
(и избежать инициализации выделенного объекта, если T
является POD).