成员变量初始化

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()xdirect-initialized,因为 0 在成员初始值设定项列表中明确显示。

对于 C::C()xvalue-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。)