存在的语义: 定义了一个整型常量集合,而且代表这些整型常量之间具备关联.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); /* 错误 */