继承的POD类型的值初始化

时间:2012-09-18 19:02:33

标签: c++

假设以下内容:

struct POD1 { int a; };
struct POD2 : POD1 { int b; };

int main() {
    POD2 p2 = POD2();
    return 0;
}

p2.a定义后,p2.bp2都等于0吗?基本上我不确定值初始化规则是否也适用于POD类型的基类。

1 个答案:

答案 0 :(得分:4)

<击>     POD2 p2();

这不符合您的期望,而是通过名称p2声明一个不带参数的函数并返回POD2

现在,情况略有不同:

POD2 p2 = POD2();

表达式POD2()的右侧表示创建一个临时的值初始化 [5.2.3 / 2]。没有用户定义构造函数的用户定义类型的值初始化零初始化 [8.5 / 7],以及零初始化 type将零初始化每个成员和基础[8.5 / 5]保证两个成员都为0。