根据C标准,以下三种结构定义是否有差异?
struct Foo { int a; }; struct Foo { int a{}; }; struct Foo { int a{0}; };
最后两个是C 11.
解决方法
给定第一个定义,如果您创建一个具有自动存储持续时间的Foo实例,那么将会初始化一个.您可以执行聚合初始化来初始化它.
Foo f{0}; // a is initialized to 0
Foo的第二和第三个定义都将初始化数据成员a到0.
在C 11中,2和3都不是aggregates,而是C 14 changes that rule,尽管添加了大括号或等初始化器,它们都保留了聚合.