默认构造一个整数数组是否会初始化它?

时间:2011-06-27 21:40:50

标签: c++ arrays initialization default-constructor

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

struct S
{
    S() : array() {}

    int array[SIZE];
};

...

S s;
// is s.array zero-initialized?

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

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

1 个答案:

答案 0 :(得分:12)

是(突出我的):

  

(C ++ 03 8.5)

     

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

     
      
  • 如果T是具有用户声明的构造函数(12.1)的类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的)

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

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

  •   
  • 否则,该对象为零初始化

  •   
     

...

     

初始化程序为空括号的对象,即(),应进行值初始化。