C ++ 0x中新的“枚举类”声明是否允许切换新的枚举?
我问的是标准说的是什么,而不是编译器的支持。
答案 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)。