我发现,当带有默认构造函数的简单数据结构包含一个数组时,可以使用不同数量的参数调用默认构造函数,即:
struct LayerData
{
uint32_t d[60];
};
可以通过以下方式初始化:
LayerData in({rand(),rand(),rand(),rand(),rand()});
并且它可以正确编译。
这是C ++ 11中的预期行为吗?隐式构造函数中没有大小的编译时检查?
N3337 8.5.1 / 7
如果列表中的初始化子句少于聚合中的成员,则每个未显式初始化的成员应从一个空的初始化子列表(8.5.4)中初始化。
struct S { int a; const char* b; int c; };
S ss = { 1, "asdf" };
用1初始化ss.a,用“ asdf”初始化ss.b,用int()形式的表达式的值ss.c初始化,即0。
因此,在您的示例中,前5个元素用的rand()
其他初始化int()
为0
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句