初始化C ++结构

史蒂文·斯通勒

这两种方式的结构初始化之间是否有区别:

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和y1.1初始化在C ++ 14之前这是不可能的。

PS:刚刚测试了上面的代码,clang ++对其进行了编译-std=c++1y,但是g ++ 4.9.2拒绝了它,即使我使用进行了编译-std=c++14

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章