在C ++ 0x中打开枚举类

时间:2011-06-13 06:20:31

标签: c++ enums c++11

C ++ 0x中新的“枚举类”声明是否允许切换新的枚举?

我问的是标准说的是什么,而不是编译器的支持。

2 个答案:

答案 0 :(得分:17)

来自n3242草案:

  

6.4.2 switch语句[stmt.switch]

     

[...]

     

2条件应为整数类型,枚举类型或类型的单一非显式    存在转换函数到积分或枚举类型(12.3)。

     

7.2枚举声明[dcl.enum]

     

[...]

enum-key:
    enum
    enum class
    enum struct

这意味着是的。

答案 1 :(得分:7)

是的,scoped(enum {class,struct})枚举和枚举器在switch语句的上下文中的行为与unscoped(enum,old style)完全相同。

n3242 - 6.4.2.2 [stmt.switch]:

  

条件应为整数类型,枚举类型或类型的单一非显式   存在转换函数到积分或枚举类型(12.3)。如果条件是类类型,则   通过调用转换函数转换条件,并使用转换结果代替   本节其余部分的原始条件。执行整体促销。任何声明   在switch语句中可以用一个或多个case标签标记如下:

case constant-expression :
     

其中constant-expression应为整数常量表达式(5.19)。积分常量表达式隐式转换为切换条件的提升类型。没有两个案例常量   转换为提升类型的开关条件后,同一个开关应具有相同的值。

在条件的情况下,列出了枚举类型。这包括范围和未范围的枚举(参见n3242 - 7.2)。

对于案例标签,它们必须是整数常量表达式。这是整数或枚举类型的常量表达式(参见n3242 - 5.19.3)。