首页 > 后端开发 > C++ > 何时在数组的 C 聚合初始化中使用大括号?

何时在数组的 C 聚合初始化中使用大括号?

Barbara Streisand
发布: 2024-12-07 03:42:11
原创
377 人浏览过

When to Use Braces in C   Aggregate Initialization with Arrays?

包含数组的聚合的不明确初始化语法

在 C 中,初始化包含数组的聚合时,省略花括号可能会导致混乱和错误。这在以下示例中很明显:

结构的 std::array 需要大括号

第一个示例抛出错误,因为 std::array 是聚合并且缺少用户定义的构造函数。其内部数组的初始化需要显式大括号,如更正版本中所示:

POD 的 std::array 不需要大括号

相反, std::array第二个示例中不需要大括号,因为 double 是普通旧数据类型 (POD),并且数组初始化由默认初始化程序有效处理。

聚合的一致性

聚合成员需要大括号的原则也适用于其他类型的聚合,例如好吧:

D 中的歧义

但是,以下示例会导致错误:

在 D 中,初始化器因为 foo 本身就是一个数组。 meow3 中的大括号不明确,因为它们可以引用 foo 的初始化或其内部数组。为了解决歧义,需要显式大括号,如 bark3 中。

初始化聚合的机制

当聚合初始化中省略大括号时,适用以下规则:

  1. 如果成员聚合的初始值设定项以大括号开头,则将其视为全花括号初始化,并且大括号内的所有成员都被初始化。
  2. 如果初始化器不以大括号开头,则仅从列表中获取足够的初始化器来初始化聚合的成员;任何剩余的初始化器都用于父聚合的下一个成员。

其他示例

  • 完全支撑初始化: { {1, 3, 5}, {2, 4, 6}, {3, 5, 7} }
  • 内部聚合省略了大括号: { 1, 3, 5, 2, 4, 6, 3, 5, 7 }
  • 不明确语法: { {1, 3, 5}, {2, 4, 6}, 3, 5, 7 } (既不是完全支撑也不是省略支撑)

以上是何时在数组的 C 聚合初始化中使用大括号?的详细内容。更多信息请关注PHP中文网其他相关文章!

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