首页 > 解决方案 > 成员变量初始化

问题描述

x在这些情况下,成员变量的初始化是否有任何区别:

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

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

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

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

标签: c++constructorinitialization

解决方案


对于B::B(),在成员初始化器列表中显式x直接初始化。0

对于C::C(),x值初始化的,作为在成员初始化器列表中初始化为零的结果。0

另一方面,A::A()什么也不做。然后对于A具有自动和动态存储持续时间的类型的对象,x默认初始化为不确定的值,即不保证为0. (请注意,静态和线程本地对象被初始化为零。)


推荐阅读