C++枚举赋值规则疑问:预期枚举值four为3,实测输出为2
理清C++枚举自动赋值的误区
嘿,我来帮你拆解这个问题——你推测的枚举值和实际输出不符,核心是对C++枚举的自动赋值规则理解错了!
先明确C++枚举的核心规则:
- 第一个没显式赋值的枚举成员,默认值是0;
- 之后所有没显式赋值的成员,取值都是紧挨着它的前一个枚举成员的值 + 1,不管前一个成员是显式赋值还是自动生成的值。
现在我们逐个分析你给出的枚举:
enum { one, two = 4, three = 1, four};
one:第一个成员且没赋值,所以是0,这部分你猜对了。two:显式设为4,没问题。three:显式赋值为1,这里直接覆盖了原本应该是4+1=5的默认值。four:没显式赋值,所以它的取值是前一个成员three的值加1,也就是1+1=2——这就是你用cout输出four得到2的原因!
你之前误以为four会跟着two的4来递增,但实际上枚举的自动赋值是严格按定义顺序走的,每个未赋值成员只和它上一个成员挂钩,不管上一个成员是手动设的值还是自动生成的。
给你再举个例子加深理解:
enum { a, b=5, c, d=3, e};
对应的取值是:
a = 0b = 5c = 5+1=6d = 3e = 3+1=4
这样是不是就完全清晰啦?
内容的提问来源于stack exchange,提问作者Joe kardin
相关产品推荐
相关产品推荐

