HC4*_*ica 7 c++ arrays initialization default-constructor
如果我有一个带有数组成员的结构,并且我在结构的构造函数中显式调用了数组的默认构造函数,那么元素是否会默认构造?(在整数数组的情况下,这将意味着零初始化).
struct S
{
S() : array() {}
int array[SIZE];
};
...
S s;
// is s.array zero-initialized?
Run Code Online (Sandbox Code Playgroud)
使用gcc进行的快速测试表明情况确实如此,但我想确认我可以依赖这种行为.
(我注意到如果我没有在结构构造函数中显式地默认构造数组,则数组元素具有随机值.)
Oli*_*rth 12
是的(突出我的):
(C++ 03 8.5)
对值类型T的对象进行值初始化意味着:
如果T是具有用户声明的构造函数(12.1)的类类型(第9节),则调用T的默认构造函数(如果T没有可访问的默认构造函数,则初始化是错误的);
如果T是没有用户声明的构造函数的非联合类类型,那么T的每个非静态>数据成员和基类组件都是值初始化的
如果T是数组类型,那么每个元素都是值初始化的;
否则,该对象被零初始化
...
初始值为空集括号的对象,即(),应进行值初始化.