首页 > 后端开发 > C++ > 为什么指定初始化列表被排除在 C 11 之外?

为什么指定初始化列表被排除在 C 11 之外?

Barbara Streisand
发布: 2024-12-27 22:46:11
原创
232 人浏览过

Why Were Designated Initializer Lists Excluded from C  11?

C 11 中的指定初始值设定项列表排除

C 11 缺乏对指定初始值设定项列表的支持,这是 C99 中存在的功能。这一遗漏让一些开发人员感到困惑,他们想知道为什么新标准中没有包含如此方便的语法。

基本原理

C 标准委员会一直拒绝将指定的初始值设定项列表合并到语言中。它们的基本原理源于几个固有的挑战:

求值顺序不确定性:

在 C99 中,指定初始化子表达式的求值顺序是不确定的。这可能会导致意外的行为,特别是当初始化涉及交互函数或副作用时。

兼容性违规:

如果 C 要实现具有不确定评估的指定初始值设定项列表命令,它将破坏与现有 C99 实现的兼容性,而现有 C99 实现通常提供一致的评估

可行性问题:

标准委员会多次对以符合严格初始化列表要求的方式实现指定初始化列表的可行性表示怀疑C (11.6.4[dcl.init.list]4).

C 中的指示符限制20

虽然指定的初始化器列表仍然被排除在 C 11 和 C 17 之外,但 C 20 标准引入了部分支持和限制,以确保确定性和兼容性。这些限制包括:

  • 只能指定按照初始化顺序声明的数据成员。
  • 不支持数组和嵌套初始化。
  • 全部或无数据成员必须通过以下方式初始化

结论

从 C 11 中排除指定初始化器列表是标准委员会出于对评估顺序不确定性的担忧而故意做出的决定,兼容性问题和实施挑战。虽然 C 20 最终添加了有限的支持,但 C 标准继续专注于执行严格的初始化程序顺序并避免可能损害程序正确性或可移植性的不可预测的行为。

以上是为什么指定初始化列表被排除在 C 11 之外?的详细内容。更多信息请关注PHP中文网其他相关文章!

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