用常量表达式初始化的常量整数类型声明应该是常量

主要观点:

  • 提议将 C 语言中立即用整数常量表达式初始化的非externconst限定(某些情况下除static外无其他存储类说明符)整数类型(包括枚举类型)对象声明隐式升级为constexpr声明,仅在特定条件下生效,如用整数常量表达式初始化等。
  • 解释了为何限制为非extern声明和整数及类似类型,而非其他类型,如extern对象声明可能指向外部只读内存,不能标记为真常量。
  • 提及之前关于降级实现定义整数常量表达式的论文被否定,应反其道而行之,开始将这些东西视为常量表达式。
  • 介绍了为实现该提议所写的论文及其具体内容,包括对各种声明在升级前后constexpr状态的示例说明,以及在标准中的具体修改内容。
  • 希望能将此简单提议纳入 C 语言,以统一实现中的现有实践,减少警告,并会在 2024 年 10 月左右的 C 会议上推动该提案。

关键信息:

  • constexpr可用于 C23 中的对象声明(但非函数)。
  • extern声明、整数类型等条件限制。
  • 之前论文被否定及反方向提议。
  • 标准中关于升级声明的具体修改段落。

重要细节:

  • 示例中各种声明在升级前后constexpr状态的表格展示。
  • 提及 C++在编译时处理几乎所有可处理的东西,而 C 相对保守。
  • 介绍相关论文在 RedHat 博客和 LLVM 文档中的链接。
阅读 16
0 条评论