enum枚举量
1 | enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet} |
上述语法spectrum
为枚举,被称为enumeration
,red
被称为enumerator
。他们为符号常量,对应着从0
开始的数值。
枚举量是整型,可被提升为int类型,但int类型不能自动转换为枚举类型。如下代码段所示:1
2int color = blue;
color =3 + blue;
如果int值是有效的,则可以通过强制类型转换,将它赋给枚举变量:1
2spectrum band;
band = spectrum(3);
设置枚举量的值
可以使用赋值预算符显式地设置枚举量的值:1
enum bits{one=1, two=2, four=4, eight=8};
指定值必须是整数。也可以显式地设置枚举量的值:1
enum bigstep{first, second=100, third}
可以创建多个值相同的枚举量1
enum {zero, null=0, one, numero_uno=1}
在C++
早期的版本中,只能将int
值赋给枚举量,但这种限制取消了,因此可以使用long甚至long long类型的值。
枚举的取值范围
通过强制转换,可以将取值范围中的任意整数值赋给枚举变量,即使这个值不是枚举值。例如,假设bits和myflag的定义如下:1
2enum bits{one=1, two=2, four=4, eight=8};
bits myflag;
则下面的代码将是合法的:1
myflag = bits(6)
取值范围的定义如下。首先,要找出上限,需要知道枚举量的最大值。找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。要计算下限,需要知道枚举量的最小值。如果它不小于0,则取值范围的下限为0;否则,采取与寻找上限方式相同的方式,但加上负号。