C 构造函数隐式成员

C++ Constructor implicit members

本文关键字:成员 构造函数      更新时间:2023-10-16

考虑以下类定义:

class Foo {    
private:
    int a;
    int b;
public:
    Foo() : 
        a()
    {}
};

如果我没记错的话,a()将调用int的默认构造函数并初始化为0。如果我忽略了构造函数,则不确定会员变量会发生什么。但是在此示例中b呢?对于我的GCC版本,它似乎也设置为0,但这是定义的行为吗?

感谢您的回答。

b将是未进行的,因此尝试使用它会导致UB(不确定的行为)。碰巧的是,您的成员被GCC设置为零,但您不应依靠此。

实际上,如果您对(-Wall -Wextra -Wpedantic)上的所有警告进行编译,则GCC吐出

warning: 'foo.Foo::b' is used uninitialized in this function

尝试做

之类的事情
cout << foo.b; // assuming b is public here

根据标准,它是未定义的,并将其初始化为用于占据其现在占据的内存块的任何值。但是,某些人会自动将值初始化为该类型的零值。

查看此问题的接受答案:

c中已声明的非初始化变量会发生什么?它有一个值吗?