创建符号常量,可以代替const。还可以定义新类型,但必须严格的限制进行。
1 enum spectrum {red, orange, green, blue}
- red等作为符号常量,对应整数值0-3
- 这些常量叫做枚举量
声明:
1 spectrum band;
在不进行强制类型转换的情况下,真能将定义枚举时使用的枚举量赋给这种枚举的变量。
1 band = red; //正确 2 band = 2000; //错误!
枚举只定义了赋值运算符。
枚举量是整型,可以被提升为int类型,但int类型不能自动转换为枚举类型。
1 int color = blue; 2 color = 3 + red; //red会被自动转换成int
如果int值是有效的,则可以通过强制类型转换,将它赋给枚举变量。
1 band = spectrum(2);
枚举常用来定义相关的符号常量,而不是新类型。如果打算只使用符号常量,而不创建枚举类型的变量,可以省略枚举类型的名称:
enum {red, green, blue};
设置枚举量的值
1 enum bits{one=1, two=2, three=3};//指定的值必须是整数 2 3 enum bigstep {first, second=1000, third};//first默认为0,后面没有被初始化的枚举量的值比前面的枚举量值大1,third=1001 4 5 enum {zero, null=0, one, numer=1};//zero=0,one=1
枚举的取值范围
1 enum bits{one=1, two=2, three=8}; 2 bits myflag; 3 myflag bits(6);//6不是枚举值,但是位于枚举定义的取值范围。
取值范围寻找方法:
- 上限:大于最大值的最小的2的幂,再减一
- 2^4=16 > 8 ,16-1 = 15,所以上限为15
- 下限:如果最小值大于0,则下限为0;付过最小值小于0,计算方法同上限的计算方法,加符号。