”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 为什么 GCC 无法使用初始化列表初始化 std::array?

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

发布于2024-11-19
浏览:683

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

初始化列表和 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 无法处理此语法很可能是一个错误。

最新教程 更多>
  • ## 淘汰视图模型:对象文字或函数 - 哪一个适合您?
    ## 淘汰视图模型:对象文字或函数 - 哪一个适合您?
    KO 视图模型:对象文字与函数在 Knockout JS 中,可以使用对象文字或函数来声明视图模型。虽然两者的主要目的都是定义可观察的属性和计算函数,但它们之间的关键区别会影响封装、灵活性和代码组织。对象文字:var viewModel = { firstname: ko.observabl...
    编程 发布于2024-11-19
  • 为什么我们应该避免在 MySQL 脚本中使用“SET NAMES”?
    为什么我们应该避免在 MySQL 脚本中使用“SET NAMES”?
    使用“SET NAMES”的注意事项在MySQL数据库处理的上下文中,“SET NAMES”的正确使用一直是一个讨论的话题。正如 O'Reilly 的《高性能 MySQL》中所述,在脚本开头使用“SET NAMES UTF8”的做法因其效率低下而受到质疑。Unicode 感知数据库的最佳实践...
    编程 发布于2024-11-19
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-11-19
  • 如何确保 MySQL 表是使用 Hibernate 使用 InnoDB 引擎创建的?
    如何确保 MySQL 表是使用 Hibernate 使用 InnoDB 引擎创建的?
    如何使用 Hibernate 创建 MySQL InnoDB 表当使用 Hibernate 和 JPA 时,用户在使用 InnoDB 创建 MySQL 表时经常遇到挑战引擎而不是 MyISAM。为了解决这个问题,一个广泛推荐的解决方案是通过设置 hibernate.dialect 属性来配置 Hib...
    编程 发布于2024-11-19
  • 大批
    大批
    方法是可以在对象上调用的 fns 数组是对象,因此它们在 JS 中也有方法。 slice(begin):将数组的一部分提取到新数组中,而不改变原始数组。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index p...
    编程 发布于2024-11-19
  • 使用子类对象的超类引用
    使用子类对象的超类引用
    考虑一个场景,我们创建一个名为 User 的类,然后创建一个扩展 User 的子类,名为 Employee。 通常,我们使用以下内容创建 User 的实例: User user = new User(); 这里User是变量user的类型,user是保存类实例的变量,new User()创建了一个新...
    编程 发布于2024-11-19
  • 如何在 Go 中不阻塞地检查 Stdin 中的数据?
    如何在 Go 中不阻塞地检查 Stdin 中的数据?
    使用 Go 检查 Stdin 中的数据在 Go 中,在使用命令和管道时,与标准输入 (stdin) 交互通常是一项关键任务。然而,在不阻塞程序执行的情况下确定 stdin 是否有数据可能具有挑战性。os.Stdin 文件对象代表 stdin,它拥有与 Go 中其他文件对象类似的功能。这使我们能够利用...
    编程 发布于2024-11-19
  • 什么时候应该在 JavaScript 中使用 const:优化代码还是过度使用?
    什么时候应该在 JavaScript 中使用 const:优化代码还是过度使用?
    JavaScript 中的 Const:优化代码性能并促进语义清晰度在 JavaScript 中,const 关键字的引入引发了关于其最优值的讨论用法。虽然它可能看起来与 var 关键字类似,但使用 const 有明显的优势,可以提高代码效率并提高语义精度。const 何时合适? const 的主要...
    编程 发布于2024-11-19
  • 何时应为特殊情况保留例外?
    何时应为特殊情况保留例外?
    例外:为特殊情况保留尽管例外很普遍,但通常还是提倡保守地使用例外。深入研究这一哲学背后的原因揭示了无数的考虑因素。语义滥用为真正特殊情况而设计的异常经常被误用为控制流机制。这破坏了它们的预期语义功能,因为预计不会引发异常来响应可预见的事件,例如不正确的用户输入。异常处理的负担异常破坏正常的执行流程,...
    编程 发布于2024-11-19
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-11-19
  • CSS 和 Javascript 代码应该放在 HTML 网页中的什么位置?
    CSS 和 Javascript 代码应该放在 HTML 网页中的什么位置?
    在HTML网页中实现CSS和Javascript代码在Web开发过程中,确定CSS和Javascript代码的适当放置位置至关重要。这些文件在设计网页样式和增强网页功能方面发挥着重要作用。当遇到诸如 之类的代码时,了解其在 HTML 文档中的预期位置非常重要。放置选项在 HTML 文档中包含 CS...
    编程 发布于2024-11-19
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    编程 发布于2024-11-19
  • 如何使用 Pandas 解析分号分隔的 CSV 文件?
    如何使用 Pandas 解析分号分隔的 CSV 文件?
    使用 Pandas 解析分号分隔的 .CSV 文件处理逗号分隔值 (CSV) 文件时,正确处理至关重要分隔符以确保准确的数据解析。 Pandas 提供了一种简单的解决方案,用于读取带有非标准分隔符(例如分号)的 CSV 文件。考虑这种情况:您有一个格式类似于以下内容的 .csv 文件:a1;b1;c...
    编程 发布于2024-11-19
  • Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta 中的列偏移发生了什么?
    Bootstrap 4 Beta:列偏移的删除和恢复Bootstrap 4 在其 Beta 1 版本中引入了重大更改柱子偏移了。然而,随着 Beta 2 的后续发布,这些变化已经逆转。从 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    编程 发布于2024-11-19
  • ENUM 是 MySQL 中有限值的最佳选择吗?
    ENUM 是 MySQL 中有限值的最佳选择吗?
    MySQL ENUM 性能注意事项在某些情况下使用 ENUM 可能会影响性能。虽然它在强制数据完整性方面提供了好处,但也存在需要考虑的潜在缺点。特定操作的性能惩罚处理数量有限的字段时可能的值 (5-10),ENUM 可能无法提供性能优势。事实上,这可能会对某些操作产生显着的负面影响,例如:查询允许的...
    编程 发布于2024-11-19

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3