假设以下内容:
struct POD1 { int a; };
struct POD2 : POD1 { int b; };
int main() {
POD2 p2 = POD2();
return 0;
}
p2.a
定义后,p2.b
和p2
都等于0吗?基本上我不确定值初始化规则是否也适用于POD类型的基类。
答案 0 :(得分:4)
<击> POD2 p2();
这不符合您的期望,而是通过名称p2
声明一个不带参数的函数并返回POD2
。
击>
现在,情况略有不同:
POD2 p2 = POD2();
表达式POD2()
的右侧表示创建一个临时的值初始化 [5.2.3 / 2]。没有用户定义构造函数的用户定义类型的值初始化是零初始化 [8.5 / 7],以及零初始化 type将零初始化每个成员和基础[8.5 / 5]保证两个成员都为0。