给出enum
声明如此:
enum {
A,
B,
C,
D
};
参考C ++ 11标准的第7.2节,通用编译器支持是什么?具体来说,摘自第7.2.2节:
如果第一个枚举器没有初始化器,则该值为 相应的常数为零。没有的枚举器定义 初始化程序为枚举数提供通过增加得到的值 上一个枚举器的值为1。
我能否期望常见的现代编译器(GCC,Intel,Clang,CL的最新版本,其他)给出相同的结果,即A = 0
,B = 1
,C = 2
和D = 3
?
答案 0 :(得分:6)
您引用的规则在C ++ 11中并不新鲜。它是C ++ 03,C ++ 98,C11,C99和C89的一部分。此规则存在于之前这些语言已经标准化。 Java和C#都使用它们的枚举继承了这种行为。
是的,编译器支持这部分语言。就像他们支持if
,switch
,#define
,int
和其他基本语言结构一样。
我们不是在讨论r值引用或lambda等。这是今天许多程序员甚至出生之前的核心内容。
答案 1 :(得分:3)
是的,如果编译器支持标准。
enum { a, b, c=0 };
enum { d, e, f=e+2 };
将a
,c
和d
定义为零,将b
和e
定义为1,将f
定义为3 。