C 结构具有CHAR数组以不寻常的方式初始化为零



遇到了C 初始化代码的一个非命令,该代码似乎可以很好地工作...

struct sfoobar { char bar[10]; char foo[10]; };
...
sfoobar x { 0 };

这是将这些字符阵列初始化为零的可接受的方法?

这在C 中是有效的。因为效果sfoobar x { 0 };将初始化x.barx.foo的所有元素到0

根据汇总初始化规则,可以省略嵌套初始化器列表的括号,

可以将嵌套初始化器列表周围的牙套省入(省略(,在这种情况下,作为必要的许多初始化器条款用于初始化相应的子聚集物的每个成员或元素,然后使用后续的初始化器子句来初始化以下内容。对象的成员。

然后 sfoobar x { 0 };是指初始化x.bar的第一元素到0

如果初始化器条款的数量小于 and bases (since C++17)或初始化列表的成员数量完全为空,则剩余的成员and bases (since C++17)是按空列表初始化的by their default initializers, if provided in the class definition, and otherwise (since C++14),按照通常的列表启动规则(该执行价值量化规则对于具有默认构造函数的非类型类型和非类型类,以及聚合的汇总初始化(。

因此,所有其余元素,包括x.bar的第二至第10个元素以及x.foo的所有元素也将被价值化为0

最新更新