Если у вас есть такой инициализированный член, это будет value-initialized
. Это также верно для POD. Для структуры каждый член инициализируется значением таким образом, а для массива каждый его элемент инициализируется значением.
Инициализация значения для скалярного типа, такого как указатель или целое число, он будет инициализирован до 0
, преобразованного в правильный тип. Таким образом, вы получите нулевые указатели или false или любой другой тип, который у вас есть конкретно.
Обратите внимание, что правило слегка изменилось с C ++ 98 на C ++ 03 (что мы имеем сейчас), что может иметь неожиданные последствия. В C ++ 98 этого не было value-initialization
. Он сказал, что инициализация по умолчанию происходит, что для не POD-типа всегда означало, что вызывается конструктор по умолчанию. Но value-initialization
в C ++ 03 имеет особое значение, если нет объявленного пользователем конструктора: тогда каждый элемент инициализируется значением.
Вот разница:
struct A { int c; ~A() { } }; // non-POD, but no user declared ctor
struct B { A a; B():a(){ } } b;
Теперь в C ++ 03 вам будет гарантировано, что b.a.c
равно нулю. В то время как в C ++ 98 b.a.c
будет иметь неопределенное значение.