2011-06-13 61 views
13

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

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

+9

@特写投票人:这个题外话是怎么回事? – GManNickG 2011-06-13 07:01:51

回答

17

从n3242草案:

6.4.2 switch语句[stmt.switch]

[...]

2所述的条件应为整体式的,枚举类型,或者存在单个非显式转换函数转换为整数或枚举类型(12.3)的类类型。

7.2枚举声明[dcl.enum]

[...]

enum-key: 
    enum 
    enum class 
    enum struct 

这意味着肯定。

7

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

n3242 - 6.4.2.2 [stmt.switch]:

的条件应是整数类型,枚举类型,或一个类类型的的对,其中单个非显式 转换功能一体或枚举类型存在(12.3)。如果条件属于类别类型,则通过调用该转换函数来转换 条件,并且使用转换结果代替本节其余部分的原始条件 。积分促销被执行。

case constant-expression : 

其中常数表达式应整数表达式(5.19):switch语句中的任何语句 可以与一种或多种情况下的标记如下进行标记。积分常量表达式隐式转换为开关条件的升级类型。 中没有两个case常量在转换到提升类型的开关条件后,相同的开关应具有相同的值。

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

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