成员变量初始化

时间:2021-05-25 13:50:16

标签: c++ constructor initialization

在这些情况下,x 成员变量的初始化有什么不同:

struct A {
    int x;
    A() {}
};

struct B {
    int x;
    B() : x(0) {}
};

struct C {
    int x;
    C() : x() {}
};

对于所有这些情况,在我所做的测试中,x 始终设置为初始值 0。这是有保证的行为吗?这些方法有什么不同吗?

1 个答案:

答案 0 :(得分:4)

对于 B::B()x 在成员初始值设定项列表中明确为 direct-initialized 作为 0

对于 C::C()xvalue-initialized,结果 zero-initialized 作为 0 在成员初始值设定项列表中。

另一方面,A::A() 什么也不做。那么对于具有自动和动态存储期限的 A 类型的对象,x 将是 default-initialized 到不确定值,即不保证是 0。 (请注意,静态和线程本地对象获得 zero-initialized。)