当初始化器列表中不能省略外大括号时
在 C 中,在处理某些类型的初始化器列表时需要外大括号聚合结构,特别是那些普通旧数据类型 (POD) 或缺少用户定义的构造函数的结构。与标准库中的大多数容器不同,std::array 属于这一类。
std::array 带大括号的初始化
考虑以下示例:
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
其中 A 是具有两个数据成员的结构。包含 {0, 0.1}、{2, 3.4} 的额外大括号是必需的,因为它初始化 std::array 的内部数组。如果没有它们,编译器将报告“太多初始化程序”错误。
直接数组初始化
此行为类似于直接数组初始化:
Aarray a1 = { {0, 0.1}, {2, 3.4} };
这里,Aarray结构体的内部数组数据被直接初始化。如果没有外大括号,编译器将遇到与 std::array 相同的错误。
与标量类型的比较
初始化标量类型(如 double)的数组时,外大括号是可选的,因为标量类型不是聚合。例如:
std::array<double, 2> a2 = {0.1, 2.3};
在这种情况下,不需要额外的大括号,因为数组的数据成员已经由初始化列表 {0.1, 2.3} 直接初始化。
以上是C 初始化器列表中何时需要'std::array”和类似聚合的外大括号?的详细内容。更多信息请关注PHP中文网其他相关文章!