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

qua*_*dev 13 c++ enums c++11

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

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

Luc*_*ton 17

从n3242草案:

6.4.2 switch语句[stmt.switch]

[...]

2条件应为整数类型,枚举类型或类型,其中存在单个非显式转换函数为积分或枚举类型(12.3).

7.2枚举声明[dcl.enum]

[...]

enum-key:
    enum
    enum class
    enum struct
Run Code Online (Sandbox Code Playgroud)

这意味着是的.


Mic*_*cer 7

是的,作用域(enum {class,struct})枚举和枚举器在switch语句的上下文中的行为与unscoped(枚举,旧样式)枚举完全相同.

n3242 - 6.4.2.2 [stmt.switch]:

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

case constant-expression :
Run Code Online (Sandbox Code Playgroud)

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

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

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