遇到了一段不常见的 c++ 初始化代码,它似乎可以与以下代码一起正常工作......
struct sfoobar { char bar[10]; char foo[10]; };
...
sfoobar x { 0 };
这是将这些字符数组初始化为零的可接受方法吗?
遇到了一段不常见的 c++ 初始化代码,它似乎可以与以下代码一起正常工作......
struct sfoobar { char bar[10]; char foo[10]; };
...
sfoobar x { 0 };
这是将这些字符数组初始化为零的可接受方法吗?
这在 C++ 中有效。因为效果会初始化和的sfoobar x { 0 };
所有元素。x.bar
x.foo
0
根据聚合初始化规则,嵌套初始化列表的大括号可以省略,
嵌套初始化器列表周围的大括号可以省略(省略),在这种情况下,根据需要使用尽可能多的初始化器子句来初始化相应子聚合的每个成员或元素,并且随后的初始化器子句用于初始化以下成员目的。
then意味着初始化tosfoobar 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)
,按照通常的列表初始化规则(对非类类型执行值初始化和具有默认构造函数的非聚合类,以及聚合的聚合初始化)。
因此,所有剩余的元素,包括 的第 2 到第 10 个元素x.bar
以及 的所有元素也x.foo
将被初始化为值0
。