成员变量初始化
Member variables initialization
在这些情况下x
成员变量的初始化有什么区别吗:
struct A {
int x;
A() {}
};
struct B {
int x;
B() : x(0) {}
};
struct C {
int x;
C() : x() {}
};
对于所有这些情况,在我所做的测试中,x
始终设置为初始值 0。这是有保证的行为吗?这些方法有什么区别吗?
对于 B::B()
,x
是 direct-initialized,因为 0
在成员初始值设定项列表中明确显示。
对于 C::C()
,x
是 value-initialized, as the result zero-initialized 作为成员初始值设定项列表中的 0
。
另一方面,A::A()
什么都不做。然后对于具有自动和动态存储持续时间的 A
类型的对象,x
将是 default-initialized to indeterminate value, i.e. not guaranteed to be 0
. (Note that static and thread-local objects get zero-initialized。)
在这些情况下x
成员变量的初始化有什么区别吗:
struct A {
int x;
A() {}
};
struct B {
int x;
B() : x(0) {}
};
struct C {
int x;
C() : x() {}
};
对于所有这些情况,在我所做的测试中,x
始终设置为初始值 0。这是有保证的行为吗?这些方法有什么区别吗?
对于 B::B()
,x
是 direct-initialized,因为 0
在成员初始值设定项列表中明确显示。
对于 C::C()
,x
是 value-initialized, as the result zero-initialized 作为成员初始值设定项列表中的 0
。
另一方面,A::A()
什么都不做。然后对于具有自动和动态存储持续时间的 A
类型的对象,x
将是 default-initialized to indeterminate value, i.e. not guaranteed to be 0
. (Note that static and thread-local objects get zero-initialized。)