首页 >后端开发 >C++ >C 初始化器列表中何时需要'std::array”和类似聚合的外大括号?

C 初始化器列表中何时需要'std::array”和类似聚合的外大括号?

Susan Sarandon
Susan Sarandon原创
2024-12-05 03:17:18793浏览

When Are Outer Braces Required in C   Initializer Lists for `std::array` and Similar Aggregates?

当初始化器列表中不能省略外大括号时

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn