定義:一種建立符號常量的方式。
從它的定義中可以看出,enum就是用來定義常量的。與從const不同的是:它是一個常量集合,包含多個常量值。
For example:
enum color{red,green,yellow,blue};
也就是說,對於color這個常量,可以取red, green, yellow, blue這四個值。它們對應整數值0,1,2,3。這些常量叫做枚舉量。在預設情況下:將整數賦給枚舉量,第一個枚舉量的值為0,第二個枚舉量的值為1, 後面的以此類推。
當然,也可以自訂它們對應的整數值。如下面的方式:
enum color{red,green = 10,yellow = 20,blue};
在這種方式定義中:red對應的整數值依然為0,而green和yellow由於已對其賦值,所以原來的預設值被覆蓋,而對於blue,其值也就是在yellow對應的
整數基礎上加1,即21。
缺陷:在枚舉中定義的常量和定義枚舉的範圍相同,而不是屬於枚舉本身。
For example:
color col = red;//正確col = ::green;//正確col = color::blue;//錯誤
也正是由於這種缺陷:使得枚舉中的常量值不能在同一檔案中重複定義。
For example:
enum test1{first,second = 10};enum test2{first,second,third};
這時編譯器就會提示:error: conflicting declaration 'second'。
注意:由於枚舉量是整型,所以也可被提升為int類型,但是int類型不能自動轉換為枚舉類型。
For example:
int num = green;int m = red + 10;
這兩種方式都是合法的!
佔用的儲存空間:看到這種定義方式,不免有點手癢,想測試一下它的sizeof()的值。不錯,結果是有點意外;輸出結果為4(GCC編譯器)。為什麼呢?這與具體的編譯器有關:對於取值範圍較小的枚舉,使用一個位元組或更少的空間就足矣。然而,對於包含long類型的枚舉,則使用4個位元組。
應用:
#include <iostream>#include <string>using std::cin;using std::cout;using std::endl;using std::string;enum color{ red, green, yellow, blue};int main(void){ int id; cout << "Please input the number of color:"; cin >> id; switch (id) { case red: cout << "You choose red!"<< endl; break; case green: cout << "You choose green!"<< endl; break; case yellow: cout << "You choose yellow!"<< endl; break; case blue: cout << "You choose blue!"<< endl; break; default: ; } return 0;}