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数组初始化为零的可接受方法吗?
这在C++中有效.由于效果sfoobar x { 0 };将初始化的所有元素x.bar,并x.foo以0.
根据聚合初始化规则,可以省略嵌套初始化列表的大括号,
嵌套初始化程序列表周围的大括号可以省略(省略),在这种情况下,必要时使用许多初始化子句来初始化相应子集合的每个成员或元素,后续初始化子句用于初始化以下成员.宾语.
然后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.