默认构造一个整数数组会对其进行零初始化吗?

2024-02-17

如果我有一个带有数组成员的结构,并且我在该结构的构造函数中显式调用该数组的默认构造函数,那么这些元素是否会被默认构造? (对于整数数组,这意味着进行零初始化)。

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 的每个非静态 > 数据成员和基类组件都是值初始化的

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

  • 否则,该对象将被零初始化

...

其初始化器是一组空括号(即 ())的对象应进行值初始化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

默认构造一个整数数组会对其进行零初始化吗? 的相关文章

随机推荐