一、枚舉類型的使用方法 一般的定義方式如下: enum enum_type_name { ENUM_CONST_1, ENUM_CONST_2, ... ENUM_CONST_n } enum_variable_name; 注意:enum_type_name 是自定義的一種數據數據類型名,而enum_variable_name 為enum_type_name類型的一個變量,也就是我們平時常說的枚舉變量。實際上enum_type_name類型是對一個變量取值范圍的限定,而花括號內是它的取值范圍,即enum_type_name 類型的變量enum_variable_name 只能取值為花括號內的任何一個值,如果賦給該類型變量的值不在列表中,則會報錯或者警告。ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,這些成員都是常量,也就是我們平時所說的枚舉常量(常量一般用大寫)。 enum 變量類型還可以給其中的常量符號賦值,如果不賦值則會從被賦初值的那個常量開始依次加1,如果都沒有賦值,它們的值從0 開始依次遞增1。如分別用一個常數表示不同顏色: enum Color { GREEN = 1, RED, BLUE, GREEN_RED = 10, GREEN_BLUE }ColorVal; 其中各常量名代表的數值分別為: GREEN = 1 RED = 2 BLUE = 3 GREEN_RED = 10 GREEN_BLUE = 11 二、枚舉與#define 宏的區別 下面再看看枚舉與#define 宏的區別: 1)#define 宏常量是在預編譯階段進行簡單替換。枚舉常量則是在編譯的時候確定其值。 2)一般在編譯器里,可以調試枚舉常量,但是不能調試宏常量。 3)枚舉可以一次定義大量相關的常量,而#define 宏一次只能定義一個。 留兩個問題: A),枚舉能做到事,#define 宏能不能都做到?如果能,那為什么還需要枚舉? B),sizeof(ColorVal)的值為多少?為什么? enum定義類似與下面這樣 enum Color { Red, Gray, Blue }; 用起來可能像這樣: Color color = Red; switch(color) { case Red: ........ case Gray: ........ case Blue: ........ } 2 先說為什么Red,不能寫成Color::Red,后面這種寫法似乎更符合我們的習慣。原因是: 在C++中,枚舉類型中定義的常量,屬於定義枚舉的作用域,而不屬於這個枚舉類型; 我們可以這樣寫: Color color = ::Red; 卻不能這樣寫: Color color = Color::Red 3 關於枚舉類型所占用的內存大小,在stackoverflow中有關於這樣的一個帖子,個人認為解釋的比較合理。 其中的一句解釋是:之所以是4個字節是因為enum類型是作為一個int來存儲的。