在初始化列表中省略外大括号
在 C 中,当初始化聚合类型(例如结构体或数组)时,您可能会遇到是否在初始化列表中使用外大括号的问题。对于 POD(普通旧数据)且没有用户定义的构造函数的聚合类型(例如 std::array),需要外大括号。但是,对于没有此限制的聚合,例如内置类型,可以省略这些大括号。
POD 聚合的显式大括号
在您的示例中, std::array a1 需要显式大括号,因为 std::array 是聚合和 POD 类型。聚合的第一个成员是大小为 N 的数组,其中 N 作为模板参数传递。要直接初始化该成员,您需要为内部数组使用额外的大括号。在您错误的代码示例中:
std::array<A, 2> a1 = { {0, 0.1}, {2, 3.4} };
编译器报告“太多初始值设定项”,因为缺少内部大括号。正确的带大括号的初始化是:
std::array<A, 2> a1 = { {{ {0, 0.1}, {2, 3.4} }} };
为非 POD 聚合省略大括号
与 POD 聚合相反,非 POD 聚合就像内置类型不需要在初始化列表中显式地使用外大括号。例如,您的示例:
std::array<double, 2> a2 = {0.1, 2.3};
不包含内部数组的大括号。这是因为 double 不是聚合,并且初始化器列表直接初始化组成的 double 元素。
标准的其他见解
C 标准提供了何时使用的指导初始化列表中的外大括号可以省略:
这允许使用大括号和不使用大括号进行初始化,只要数量初始化子句匹配要初始化的成员数量。
以上是何时省略 C 初始化列表中的外大括号?的详细内容。更多信息请关注PHP中文网其他相关文章!