在这些情况下,x
成员变量的初始化有什么不同:
struct A {
int x;
A() {}
};
struct B {
int x;
B() : x(0) {}
};
struct C {
int x;
C() : x() {}
};
对于所有这些情况,在我所做的测试中,x
始终设置为初始值 0。这是有保证的行为吗?这些方法有什么不同吗?
答案 0 :(得分:4)
对于 B::B()
,x
在成员初始值设定项列表中明确为 direct-initialized 作为 0
。
对于 C::C()
,x
为 value-initialized,结果 zero-initialized 作为 0
在成员初始值设定项列表中。
另一方面,A::A()
什么也不做。那么对于具有自动和动态存储期限的 A
类型的对象,x
将是 default-initialized 到不确定值,即不保证是 0
。 (请注意,静态和线程本地对象获得 zero-initialized。)