0%

C++中enum枚举量

enum枚举量

1
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet}

上述语法spectrum为枚举,被称为enumerationred被称为enumerator。他们为符号常量,对应着从0开始的数值。
枚举量是整型,可被提升为int类型,但int类型不能自动转换为枚举类型。如下代码段所示:

1
2
int color = blue;
color =3 + blue;

如果int值是有效的,则可以通过强制类型转换,将它赋给枚举变量:

1
2
spectrum 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
2
enum bits{one=1, two=2, four=4, eight=8};
bits myflag;

则下面的代码将是合法的:

1
myflag = bits(6)

取值范围的定义如下。首先,要找出上限,需要知道枚举量的最大值。找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。要计算下限,需要知道枚举量的最小值。如果它不小于0,则取值范围的下限为0;否则,采取与寻找上限方式相同的方式,但加上负号。