继承的 POD 类型的值初始化

Value initialization of inherited POD types

本文关键字:初始化 POD 继承 类型      更新时间:2023-10-16

假设如下:

struct POD1 { int a; };
struct POD2 : POD1 { int b; };
int main() {
    POD2 p2 = POD2();
    return 0;
}

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

POD2 p2();

这不会做你所期望的,而是声明一个名为 p2 的函数,该函数不带参数并返回POD2

现在,一个稍微不同的情况是:

POD2 p2 = POD2();

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