默认构造函数C++

Adr*_*ian 5 c++

让我们说我有这个课程:

class X {
public:
    int x;
};
Run Code Online (Sandbox Code Playgroud)

我看到如果我在本地创建一个X实例,x将不会初始化为0,只有我全局创建它.
这是否意味着默认构造函数不是由编译器合成的(我怀疑)对于创建localy的对象,或者它将被合成但不是x值的零,如果是这种情况,为什么会这样?

The*_*ger 4

C++ 中的构造函数通常不会将成员初始化为 0。您必须使用值显式初始化成员。

在全局情况下内存为零的原因是因为静态内存在发生任何其他事情之前就被初始化为零。在您的情况下,隐式生成的默认构造函数随后被调用,这不会触及成员 X 的内存。

另请参阅 Derek 的回答:Is global memoryinitialized in C++?

但请注意,结构化非 POD 成员(类和结构)的默认构造函数会自动被默认构造函数调用。默认情况下,仅保留 POD 成员。

  • @TheFogger 非 POD 静态初始化为零,然后调用它们的构造函数。 (2认同)