<分区>
在这些情况下,x
成员变量的初始化是否有任何区别:
struct A {
int x;
A() {}
};
struct B {
int x;
B() : x(0) {}
};
struct C {
int x;
C() : x() {}
};
对于所有这些情况,在我所做的测试中,x
始终设置为初始值 0。这是有保证的行为吗?这些方法有什么区别吗?
<分区>
在这些情况下,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 ,结果 zero-initialized作为成员初始值设定项列表中的 0
。
另一方面,A::A()
什么也不做。然后对于具有自动和动态存储持续时间的 A
类型的对象,x
将为 default-initialized不确定值,即不保证为 0
。 (注意静态和线程局部对象得到 zero-initialized 。)
关于c++ - 成员变量初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67689388/