2011-06-13 84 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)。