此常见问题解答涉及聚合和POD,并涵盖以下材料:
根据Stack Overflow问题的接受(且唯一)答案,
使用定义构造函数
Run Code Online (Sandbox Code Playgroud)MyTest() = default;而是将零初始化对象.
那为什么以下,
#include <iostream>
struct foo {
foo() = default;
int a;
};
struct bar {
bar();
int b;
};
bar::bar() = default;
int main() {
foo a{};
bar b{};
std::cout << a.a << ' ' << b.b;
}
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
0 32766
Run Code Online (Sandbox Code Playgroud)
两个构造函数都是默认的?对?对于POD类型,默认初始化为零初始化.
根据这个问题的接受答案,
如果POD成员未在构造函数中初始化,也未通过C++ 11类内初始化,则默认初始化.
无论堆栈还是堆,答案都是一样的.
在C++ 98中(而不是之后),新的int()被指定为执行零初始化.