首页 > 后端开发 > C++ > 为什么 GCC 无法使用初始化列表初始化 std::array?

为什么 GCC 无法使用初始化列表初始化 std::array?

Linda Hamilton
发布: 2024-10-29 04:41:02
原创
706 人浏览过

Why Does GCC Fail to Initialize std::array with Initialization Lists?

初始化列表和 std::array:一个 GCC Bug

C 标准库中的 std::array 类提供了一个固定的-大小数组容器。人们普遍认为此类支持初始化列表。

但是,使用 GCC 4.6.1,尝试使用以下语法初始化 std::array 实例会失败:

<code class="cpp">std::array<std::string, 2> strings = { "a", "b" };
std::array<std::string, 2> strings({ "a", "b" });</code>
登录后复制

尽管有初始化列表使用 std::vector 时,std::array 的这种行为引发了有关 C 标准或潜在 GCC 问题的问题。

std::array 的内部工作

std::array 本质上是一个封装数组的结构体。它的结构类似于:

<code class="cpp">template<typename T, int size>
struct std::array {
  T a[size];
};</code>
登录后复制

与具有接受初始化列表的构造函数的 std::vector 不同,std::array 缺少这样的构造函数。

聚合初始化

虽然 std::array 没有用于初始化列表的显式构造函数,但它在 C 11 中被视为聚合类型。因此,它可以聚合初始化。然而,要初始化结构体中的数组,需要一组额外的大括号:

<code class="cpp">std::array<std::string, 2> strings = {{ "a", "b" }};</code>
登录后复制

潜在的 GCC Bug

C 标准允许省略此类初始化中的额外花括号。因此,如果没有它们,GCC 无法处理此语法很可能是一个错误。

以上是为什么 GCC 无法使用初始化列表初始化 std::array?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板