编译器支持枚举值

时间:2012-08-03 04:49:20

标签: c++ enums compilation standards

给出enum声明如此:

enum {
    A,
    B,
    C,
    D
};

参考C ++ 11标准的第7.2节,通用编译器支持是什么?具体来说,摘自第7.2.2节:

  

如果第一个枚举器没有初始化器,则该值为   相应的常数为零。没有的枚举器定义   初始化程序为枚举数提供通过增加得到的值   上一个枚举器的值为1。

我能否期望常见的现代编译器(GCC,Intel,Clang,CL的最新版本,其他)给出相同的结果,即A = 0B = 1C = 2D = 3

2 个答案:

答案 0 :(得分:6)

您引用的规则在C ++ 11中并不新鲜。它是C ++ 03,C ++ 98,C11,C99和C89的一部分。此规则存在于之前这些语言已经标准化。 Java和C#都使用它们的枚举继承了这种行为。

是的,编译器支持这部分语言。就像他们支持ifswitch#defineint和其他基本语言结构一样。

我们不是在讨论r值引用或lambda等。这是今天许多程序员甚至出生之前的核心内容。

答案 1 :(得分:3)

是的,如果编译器支持标准。

enum { a, b, c=0 };
enum { d, e, f=e+2 };

acd定义为零,将be定义为1,将f定义为3 。