首页 > 代码库 > 枚举(enum)

枚举(enum)

C++enum工具提供了另一种创建符号常量的方式,这种方式可以代替const。例如:

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

在默认情况下,将整数值赋给枚举量,第一个枚举量的值为0,第二个枚举量的值为1,一次类推。可以通过显式地指定整数值来覆盖默认值。

注意:

(1)在不进行强制类型转换的情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量。例如:
spectrum band:

band = blue;//valid,blue ia an spectrum

band = 2000;//invalid,2000 is an enumerator

(2)对于枚举,只定义了赋值操作符。具体的说,没有为枚举定义算术运算:

band = orange;//valid

++band;//not valid

band = orange + red;//not valid

(3)枚举量是整型,可被提升为int类型,但int类型不能自动转换为枚举类型:

int color = blue;//valid

band = 3;//not valid

color = 3 + red;//valid

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

band  = spectrum(3);//typecast 3 to type spectrum

但如果试图对一个不适当的值进行强制类型转换,将出现什么情况呢?结果是不确定的,这意味着这样做不会出错,但不能依赖得到的结果:

band spectrum(40005);

(5)设置枚举量的值

①可以使用赋值操作符来显式的设置枚举量的值,指定的值必须是整数

enum bits{one = 1,two = 2,four = 4,eight = 8};

②指定的值必须是整数。也可以只显式地定义其中一些枚举量的值

enum bigstep{first,second = 100,third};

这里,first在默认情况下为0.后面没有被初始化的枚举量的值将比其前面的枚举量大1。因此,third的值为101。

③可以创建多个值相同的枚举量

enum{zero,null = 0,one,numero_uno = 1};

其中,zero和null都为0,one和numero_uno都为1.

(6)在C++早起的版本中,只能将int值(或提升为int的值)赋给枚举量,不过这种限制已经被取消了,因此可以使用long类型的值。

(7)枚举的取值范围

最初,对于枚举来说,只有声明中指出的那些值是有效的。不过,C++现在通过强制类型转换,增加了可赋给枚举变量的合法值。每个枚举都有取值范围(range),通过强制类型转换,可以将取值范围中的任何整数赋给枚举变量,即使这个值不是枚举值。

enum bits{one = 1,two = 2,four = 4,eight = 8};

bits myflag;

myflag = bits(6)//其中6不是枚举值,但它位于枚举定义的取值范围内

取值范围的定义如下:

首先,要找出上限,需要知道枚举量的最大值。找到对于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。要计算下限,需要知道枚举量的最小值。如果它不小于0,则取值范围的下限位0;否则,采用与寻找上限方式相同的方式,但加上负号。例如,如果最小的枚举量为-6,而比它小的,最大的2的幂是-8(加上负号),因此下限为-7。

枚举(enum)