我相信新的C ++标准允许枚举类型的额外“范围”:
enum E { e1, e2 };
E var = E::e1;
由于我知道很多包含旧C风格枚举typedef的源文件,我想知道新标准是否允许对这些匿名枚举类型使用typedef:
typedef enum { d1, d2 } D;
D var = D::d1; // error?
答案 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可以解决这一特定问题。