1

给定enum这样的声明:

enum {
    A,
    B,
    C,
    D
};

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

如果第一个枚举器没有初始化器,则相应常量的值为零。没有初始化器的枚举器定义为枚举器提供了通过将前一个枚举器的值增加一而获得的值。

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

4

2 回答 2

6

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

是的,编译器支持这部分语言。就像它们支持if, switch, #define, ints 和其他基本语言结构一样。

我们不是在谈论 r 值引用或 lambdas 什么的。这是今天许多程序员出生之前的核心内容。

于 2012-08-03T05:00:58.437 回答
3

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

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

定义acd为零、1 和b3 。ef

于 2012-08-03T04:53:05.143 回答