【发布时间】:2016-04-21 01:43:06
【问题描述】:
如果我有一个没有为枚举分配数字的enum,它的序数值是否会为 0?例如:
enum enumeration { ZERO,
ONE,
TWO,
THREE,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE };
我已经找到了post citing that the C99 standard requires a 0 ordinal number。但我知道 C++ 忽略了 C99 标准中的几件事。而且我还找到了post witnessing the compiler using an ordinal value of 1,我似乎也记得看到过,但我不能说那是多久以前的事了。
我真的很想看到一个可以证实 C++ 的答案,但我也想知道序数 0 是否存在 即使我在 @987654325 的中间指定了一个值@:
enum enumeration { ZERO,
ONE,
TWO,
THREE = 13,
FOUR,
FIVE,
SIX,
SEVEN,
EIGHT,
NINE };
【问题讨论】:
-
下一个枚举常量将始终具有列表中前一个的值。所以在你的情况下,你会得到
0, 1, 2, 13, 14, 15...。请注意,这可能会产生重复。 -
@Jonathan Mee 如果与 C 相对的 C++ 中的枚举数不从 0 开始,那就很奇怪了。:)
-
@VladfromMoscow 我同意,显然从答案来看就是这样。我只是找不到任何可以保证 C++ 的东西。如果不需要,我不想继续指定序数 0:S
-
我很确定这条规则在 C99 中没有改变。也就是说,它是自 C 开始以来的方式。
标签: c++ enums language-lawyer enumeration ordinal