存在的語義: 定義了一個整型常量集合,而且代表這些整型常量之間具備關聯.spa
語法: enum 枚舉類型 { 枚舉成員列表 };code
枚舉類型,是可選的,若'枚舉類型'不爲空,則能夠用該類型來聲明變量.作用域
此時枚舉類型的變量只能由枚舉成員賦值/初始化,或者由同屬於同一枚舉類型的變量來進行賦值/初始化.如:編譯
enum Eof{ EndOfStream,NotEndOfStream }; enum HANG{ Hang,NoHang }; HANG var0=Hang; Eof var1=EndOfStream; /* 正確: 由枚舉成員進行賦值 */ Eof var2=var1; /* 正確: 由屬於同一枚舉類型的變量進行賦值 */ Eof var5=(Eof)1; /* 正確: 強制類型轉換 */ Eof var3=1; /* 錯誤: 1 是 int 類型. */ Eof var4=var0; /* 錯誤: 不屬於同一枚舉類型 */
枚舉成員列表,由若干個枚舉成員組成,使用','隔開.class
枚舉成員,自己就是一個整型常量,因此能夠出如今任何常量能夠出現的地方.變量
枚舉成員的值:命名空間
對於枚舉成員列表中第一個出現的枚舉成員,若其值未被指定,則其值爲0.不然就是指定值語法
對於其餘枚舉成員,其值若未被指定,則爲前一個枚舉成員的值+1;不然爲指定值.im
必須使用編譯期常量表達式來指定枚舉成員的值.命名
同一個枚舉列表中,枚舉成員的值能夠相同.
枚舉成員的值的範圍,也即 long 類型變量的取值範圍:[-264,263-1].
枚舉成員的名字,出如今定義枚舉的做用域/命名空間中.如:
class X{ public: enum Eof{ EndOfStream,NotEndOfStream }; }; enum Use{ UseGmtTime,UseLocalTime,UseS=1UL<<60 }; Println("%d",::UseGmtTime); /* 正確 */ Println("%d",X::EndOfStream); /* 正確 */ Println("%d",Use::UseGmtTime); /* 錯誤 */ Println("%d",X::Eof::EndOfStream); /* 錯誤 */