You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++标准中哪条规则规定枚举项重定义属于不合法行为?

你给出的示例代码:

enum class A{
    a = 0,
    a = 1
};

触发重定义报错的约束规则并不属于ODR(单定义规则)范畴,而是来自C++标准更基础的声明与作用域相关规则:

  • 首先[dcl.enum]章节明确规定:枚举项(enumerator)是其所属枚举类型作用域内的常量实体,每个枚举项的标识符都会在对应枚举的作用域中完成一次声明。
  • 其次[basic.scope.declarative]章节的规范性规则要求:同一作用域内不得声明两个同名的不可重载实体,枚举项不属于允许重载的实体类型,因此不能在同一枚举的作用域内重复声明。

你提到的[basic.def.odr#1]确实没有将枚举项纳入约束范围,因为枚举项重名问题属于声明作用域规则的约束范畴,并不适用ODR规则。

内容的提问来源于stack exchange,提问作者xmh0511

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 06:54:02