带有char数组的C++ struct以不寻常的方式初始化为零

use*_*106 6 c++ initialization aggregate-initialization

遇到了一个非常见的c ++初始化代码,似乎可以正常使用以下代码...

struct sfoobar { char bar[10]; char foo[10]; };
...
sfoobar x { 0 };
Run Code Online (Sandbox Code Playgroud)

这是将这些char数组初始化为零的可接受方法吗?

son*_*yao 8

这在C++中有效.由于效果sfoobar x { 0 };将初始化的所有元素x.bar,并x.foo0.

根据聚合初始化规则,可以省略嵌套初始化列表的大括号,

嵌套初始化程序列表周围的大括号可以省略(省略),在这种情况下,必要时使用许多初始化子句来初始化相应子集合的每个成员或元素,后续初始化子句用于初始化以下成员.宾语.

然后sfoobar x { 0 };意味着初始化x.barto 的第一个元素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)由空列表,按照通常的列表初始化规则(其执行值初始化用于非类类型和具有默认构造函数的非聚合类,以及聚合的聚合初始化).

因此,所有剩余的元素,包括第2到第10个元素x.bar以及所有元素也x.foo将被初始化0.