初始化列表和 std::array:GCC Bug
C 标准库中的 std::array 类提供了一个固定的-大小数组容器。人们普遍认为此类支持初始化列表。
但是,使用 GCC 4.6.1,尝试使用以下语法初始化 std::array 实例会失败:
std::array<:string> strings = { "a", "b" };
std::array<:string> strings({ "a", "b" });
尽管初始化列表与 std::vector 一起使用,但 std::array 的这种行为已经引发有关 C 标准或潜在 GCC 问题的问题。
std::array 的内部工作
std::array本质上是一个封装数组的结构体。其结构类似于:
template
struct std::array {
T a[size];
};
与具有接受初始值设定项列表的构造函数的 std::vector 不同,std::array 缺少这样的构造函数。
聚合初始化
虽然 std::array 没有用于初始化列表的显式构造函数,但它在 C 11 中被视为聚合类型。因此,它可以聚合初始化。但是,要初始化结构体中的数组,需要一组附加的大括号:
std::array<:string> strings = {{ "a", "b" }};
潜在的 GCC Bug
C 标准允许省略额外的大括号在这样的初始化中。因此,如果没有它们,GCC 无法处理此语法很可能是一个错误。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3