2012-05-17 63 views

回答

7

一種enum具有底層整數類型(用於存儲enum的值的類型),並且enum值可以隱式轉換到整數類型的值。

在你的情況下,基礎類型爲int,值爲0.一切都沒問題。

+5

請注意,在C++ 11中,這僅適用於無限制枚舉。對於範圍枚舉('enum class'),沒有隱式轉換爲整型。 –

0

這是絕對有效的,因爲,作爲GManNickG和西紅柿說,所有枚舉都是int類型(事實上,在C,Enum也整數,你可以將它們的範圍值枚舉。

typedef enum _foo 
{ 
    val1 = 57 
} foo; 
... 
foo f = 99; // compiles in C but not C++ 

事實上,因爲枚舉充當恆定整數值像0,-1,200,等等大多數編譯器不會抱怨,如果該函數的參數類型是布爾或浮動或其他原語類型數...

我在說什麼, ð雖然說的是,如果你有超過someFunc的簽名控制,你想++,以確保用C沒有無效的值傳遞中,將其更改爲

void someFunc(SomeEnum a); 

更多類型安全

而且,總是至少初始化您的第一枚枚舉值。我可能是錯的,但是,在當天,編譯器被允許爲你的枚舉選擇一個任意的起始值。大多數時候它選擇0但不總是。即使情況並非如此,它會使代碼變得更加自我記錄並且顯而易見。

+2

我沒有說他們都是'int',我說他們是整型。根據枚舉器中的值,它們可能是'unsigned','(unsigned)long'或'(unsigned)long long'。 – GManNickG

相關問題