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

C++枚举赋值规则疑问:预期枚举值four为3,实测输出为2

理清C++枚举自动赋值的误区

嘿,我来帮你拆解这个问题——你推测的枚举值和实际输出不符,核心是对C++枚举的自动赋值规则理解错了!

先明确C++枚举的核心规则:

  • 第一个没显式赋值的枚举成员,默认值是0;
  • 之后所有没显式赋值的成员,取值都是紧挨着它的前一个枚举成员的值 + 1,不管前一个成员是显式赋值还是自动生成的值。

现在我们逐个分析你给出的枚举:

enum { one, two = 4, three = 1, four};
  1. one:第一个成员且没赋值,所以是0,这部分你猜对了。
  2. two:显式设为4,没问题。
  3. three:显式赋值为1,这里直接覆盖了原本应该是4+1=5的默认值。
  4. four:没显式赋值,所以它的取值是前一个成员three的值加1,也就是1+1=2——这就是你用cout输出four得到2的原因!

你之前误以为four会跟着two的4来递增,但实际上枚举的自动赋值是严格按定义顺序走的,每个未赋值成员只和它上一个成员挂钩,不管上一个成员是手动设的值还是自动生成的。

给你再举个例子加深理解:

enum { a, b=5, c, d=3, e};

对应的取值是:

  • a = 0
  • b = 5
  • c = 5+1=6
  • d = 3
  • e = 3+1=4

这样是不是就完全清晰啦?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:39:40