将默认构造一个整数数组零初始化它

Will default-constructing an integer array zero-initialize it?

本文关键字:整数 一个 数组 初始化 默认      更新时间:2023-10-16

如果我有一个带有数组成员的结构,并且我在结构的构造函数中显式调用了数组的默认构造函数,那么元素会得到默认构造吗?(在整数数组的情况下,这意味着初始化零)。

struct S
{
    S() : array() {}
    int array[SIZE];
};
...
S s;
// is s.array zero-initialized?

gcc的快速测试表明情况确实如此,但我想确认我可以依赖这种行为。

(我注意到,如果我没有在结构构造函数中显式默认构造数组,数组元素就会有随机值。)

是(突出显示我的):

(C++03 8.5)

值初始化T类型的对象意味着:

  • 如果T是一个具有用户声明构造函数(12.1)的类类型(第9条),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化形式不正确);

  • 如果T是一个没有用户声明构造函数的非并集类类型,那么T的每个非static>数据成员和基类组件都是值初始化的

  • 如果T是数组类型,则每个元素都被值初始化

  • 否则,对象初始化为零

初始值设定项是一组空括号的对象,即(),应进行值初始化

相关文章: