2010-02-10 58 views
6

我相信新的C++标准允许一个额外的“范围”为枚举类型:`typedef enum {} t`是否允许C++ 0x中的范围枚举元素标识符?

enum E { e1, e2 }; 

E var = E::e1; 

因为我知道很多含旧的C风格的枚举类型定义的源文件,我想知道,如果新标准将允许使用的typedef这些否则匿名枚举类型:

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

我猜想用typedef定义的'D'实际上等同于一个适当的'enum D {}',所以同样的规则适用于这两者。所以不,这不应该是C++ 0x中的错误。 – Manuel 2010-02-10 12:40:05

+1

+1最终调用它C++ 1x :) – 2010-02-10 12:41:02

+1

我更喜欢C++ 0x,因为这是Stroustroup自己使用的术语。 – Manuel 2010-02-10 12:43:00

回答

5

新标准将增加一个新的强类型的枚举,但语法会略有不同,老风格枚举将是兼容的(有效的代码在C + +03将是有效的C++ 0x代码),所以你将不需要做任何事情来保持遗留代码有效(没有t typedef,而不是其他任何东西)。

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

有一个C++ FAQ here处理这个特定的问题。

+1

我认为OP知道typedef没有必要,他只关心使用它的传统C代码。 – Manuel 2010-02-10 12:46:02

+0

旧代码将使用旧样式枚举,并且这些枚举(OP中的枚举)将把名称带入封闭范围。我正在编辑答案,以便更清楚。 – 2010-02-10 12:49:48