2009-12-05 109 views
1

我打在同位的時刻,看着爲IO狀態微軟的代碼,發現是這樣的:面具枚舉[C++]

enum _Iostate 
    { // constants for stream states 
    _Statmask = 0x17};//What is this mask for??? 

static const _Iostate goodbit = (_Iostate)0x0; 
static const _Iostate eofbit = (_Iostate)0x1; 
static const _Iostate failbit = (_Iostate)0x2; 
static const _Iostate badbit = (_Iostate)0x4; 
static const _Iostate _Hardfail = (_Iostate)0x10; 

我只是想知道這是爲什麼面膜,因爲代碼沒有這個面具和價值保持不變這個面具一樣。 謝謝。

回答

7

它確保_Iostate枚舉具有正確的大小以容納所有後面定義的位常量及其組合。

+0

+1。更確切地說,枚舉的範圍是可以存儲在枚舉的所有枚舉值最小的可能位域中的值的範圍。在這種情況下,範圍是「0 .. 31」。 – 2009-12-05 12:54:37

+0

好東西,謝謝 – 2009-12-05 12:55:05

3

這是一個按位或所有可能的標誌。你也許可以用它從整數中的其他位提取包含標誌的部分。

+0

好東西,謝謝。 – 2009-12-05 12:54:10

+0

他接受了一個答案,但我相信這個答案是正確的一個 – karoberts 2009-12-05 12:54:32

+0

+1是的,這可能是更正確的答案。但這兩個都不是錯的,我認爲他們每個人都解釋了一個重要的部分。例如,這個答案並沒有解釋爲什麼這個枚舉器沒有像枚舉之外的其他5個那樣定義。 – 2009-12-05 13:02:14