enum可以创建符号常量,定义新类型。
enum spectrum{red, orange, yellow, green,blue,violet,indigo,ultraviolet};
这个语句主要完成了两项工作:
1.让spectrum成为新类型的名称;spectrum被称为枚举(enumeration)
2.red,yellow等被枚举的元素称为符号常量,对用0,1,2,...,7。这些常量被叫做枚举量。
枚举的一些基本属性
可以用枚举名来声明这种类型的变量:
enum spectrum band;
其中枚举变量有一些特殊的属性,在不进行强制类型转换下,只能将定义枚举时使用的枚举量赋值给枚举变量。
band = blue;//有效
band = 2000;//无效,因为2000不属于枚举定义下的枚举量的范围内。
因此枚举变量band的赋值只能是0——7之间。
对于枚举,只有赋值运算,没有加减乘除的算术运算
band = orange;//有效
++band //无效
band = red +orange//无效
枚举量是整型,可以提升至int类型,但是 int类型不能自动转换成枚举类型:
int color = blue;//有效,枚举量blue转换成了int类型
band = 3; //无效 int无法自动转枚举类型 但是 band = green可以
color = red + 3;//有效 首先color为int类型,然后枚举量red可自动转成int类型。
band = red + green //无效
首先算术运算在枚举枚举中出错
其次,虽然枚举量red 和green可以转为int型,但是其结果赋值给的band不为int类型,是枚举spectrum的枚举变量,故无效。
如果int值有效,即int在枚举量的范围内,则可以通过强制类型转换,将其赋值给枚举变量;
band = spectrum(3);
如果只是用常量,则可以不创建枚举变量:
enum {red, orange, yellow, green,blue,violet,indigo,ultraviolet};
设置枚举量的值
可以用赋值运算来显示地设置枚举量的值
enum bits{one = 1, four = 4,eight = 8};
指定的值必须是整型,也可以只显式定义部分枚举量的值:
enum bigsteo{first,second =100, third };
其中,first默认为0;后面没有被初始化的枚举量的值将会比前面的枚举量的值+1,third = 101.
最后,也可以创建多个相同数值的枚举量
enum{null, zero = 0, one, kk=1};
null == zero;
one == kk;
枚举的取值范围
enum bits{one = 1, four = 4,eight = 8};
bit myflag;
myflag = bits(6);虽然6不是枚举值,但也在枚举定义的范围内。
枚举的范围定义:
先找上限,知道最大的枚举数,然后找到比这个最大的枚举数还要大的2
的幂,再将其减1,得到的就是取值范围的上限。例如最大的枚举量为101,则在2
的幂中128比101大,再将128-1,故127即为枚举定义的上限。
再找下限,若枚举量的最小值不小于0,则0为下限,如果为负数,例如-6,则比它小的 最大的2
的幂是-8, 故-7为下限。