`typedef enum {} t`是否允许在C ++ 0x中使用带范围的枚举元素标识符?

时间:2010-02-10 12:27:00

标签: c++ enums c++11

我相信新的C ++标准允许枚举类型的额外“范围”:

enum E { e1, e2 };

E var = E::e1;

由于我知道很多包含旧C风格枚举typedef的源文件,我想知道新标准是否允许对这些匿名枚举类型使用typedef:

typedef enum { d1, d2 } D;
D var = D::d1; // error?

1 个答案:

答案 0 :(得分:5)

新标准将添加一种新类型的强枚举,但语法略有不同,旧样式枚举将兼容(C ++ 03中的有效代码将是有效的C ++ 0x代码)所以你将不需要做任何事情来保持遗留代码有效(不是typedef,而不是其他任何东西)。

enum class E { e1, e2 }; // new syntax, use E::e1
enum E2 { e1, e2 }; // old syntax, use e1 or E2::e1 (extension)

有一个C ++常见问题解答here可以解决这一特定问题。