如果你有一个这样初始化的成员,它将是value-initialized
. POD 也是如此。对于结构,每个成员都以这种方式进行值初始化,而对于数组,它的每个元素都是值初始化的。
对指针或整数等标量类型进行值初始化,您将对其进行初始化以0
转换为正确的类型。因此,您将获得空指针或 false 或您具体拥有的任何类型。
Note that the rule changed subtly from C++98 to C++03 (what we have right now), which can have surprising effects. C++98 didn't have that value-initialization
. It said default initialization happens, which for a non-POD type always meant it's default constructor invokes. But value-initialization
in C++03 has special meaning if there is no user-declared constructor: Every element is value-initialized then.
Here is the difference:
struct A { int c; ~A() { } }; // non-POD, but no user declared ctor
struct B { A a; B():a(){ } } b;
Now, in C++03, you will be guaranteed that b.a.c
is zero. While in C++98, b.a.c
will have some indeterminated value.