这两种方式的结构初始化之间是否有区别:
structVar = {}
和
structVar = {0}
更正的
如果结构是集合,则这两个定义执行相同的操作。从C ++ 11标准(N3337):
8.5.1 / 7如果列表中的初始化程序子句少于聚合中的成员,则每个未明确初始化的成员都应从其brace-or-equal-initializer进行初始化,或者如果不存在brace-or-equal-initializer,则进行初始化。 -equal-初始值设定项,来自空的初始值设定项列表(8.5.4)。
如果结构包含两个成员,例如
struct S
{
int x;
double y;
};
然后structVar = {}
将值初始化成员,即它们将变为零(或者,如果成员是非POD,则将调用默认的ctor)。
该行将structVar = {0}
仅将结构的第一个成员初始化为零。因为在这种情况下,您有一个汇总,所以其余成员由空列表初始化值,因此有效地
structVar = {0, {} };
C ++ 14为包含括号或相等初始化成员的聚合添加了聚合初始化的可能性,即
struct S
{
int x;
double y{1.1}; // or double y = 1.1;
}
在这种情况下,
structVar = {0};
x
用0和y
1.1初始化。在C ++ 14之前这是不可能的。
PS:刚刚测试了上面的代码,clang ++对其进行了编译-std=c++1y
,但是g ++ 4.9.2拒绝了它,即使我使用进行了编译-std=c++14
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句