от стандарта.
«Инициализация по умолчанию объекта типа T означает: - если T является типом класса не POD
[случай как вектор], конструктор по умолчанию для T называется. "
Обозначение конструктора T()
используется для выражения значения по умолчанию для типа T и того, что оно равно нулю для встроенных типов и конструктора по умолчанию для пользовательских типов. Конструкция POD()
производит инициализацию значения в соответствии со стандартом stdandard, в результате чего все члены и подчиненные элементы либо создаются по умолчанию, либо инициализируются нулями.
Вот почему ваше утверждение является законным, но инициализировано ли оно нулем согласно стандарту; нужен подробный поиск ИМХО.
НО, я не смог найти в стандарте, где он определяет значение конструкции по умолчанию для встроенных типов .
EDIT: -
struct S { int x; };
void f () {
S s1; // s1.x is uninitialized here
S s2 = S(); // s2.x is zero here
}
Я думаю, что мы часто составляем нашу собственную интерпретацию того, что означает конструкция по умолчанию, применяемая к встроенным типам; потому что стандарт C ++ не определяет его (по крайней мере, я не смог его найти) и я помню Stroustrup или Josuttis говорят, что это означает T()
, который описывается как « ноль преобразуется в тип T » для встроенных типов.
Поскольку int*
является встроенным типом, он инициализируется нулем.
Но я действительно не уверен.