枚举(enumeration)是C++中的一种派生数据类型,它是由用户定义的若干枚举常量(enumerator)的集合。如果一个变量只有几种可能的值,可以定义为枚举类型。所谓"枚举"是指将变量的值一一列举出来,变量的值只能在列举出来的值的范围内。
创建枚举,需要使用关键字 enum。枚举类型的一般形式为:
enum 枚举名{ 标识符[=整型常数], 标识符[=整型常数], ... 标识符[=整型常数] } 枚举变量;
如果枚举没有初始化, 即省掉"=整型常数"时, 则第一个枚举量的值为 0,第二个枚举量的值为 1,依次类推。
例如,下面的代码定义了一个颜色枚举,变量 c 的类型为 color。最后,c 被赋值为 "blue"。
enum color { red, green, blue } c;
c = blue;
默认情况下,第一个枚举量 red 的值为 0,第二个枚举量 green 的值为 1,第三个枚举量 blue 的值为 2。
设置枚举量的值
可以使用赋值运算符显式地设置枚举量的值:
enum bites { 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。
枚举的取值范围
最初,对于枚举来说,只有声明中指出的那些值是有效的,然而,C++现在通过强制类型转换,增加了可赋给枚举变量的合法值。每个枚举都有取值范围(range),通过强制类型转换,可以将取值范围内的任意整数值赋给枚举变量,即使这个值不是枚举值。
取值范围的定义:首先,要找出上限,需要知道枚举量的最大值,找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限;然后,要计算下限,需要知道枚举量的最小值,如果它不小于0,则取值范围的下限为0,否则,找到小于这个最小值的、最大的2的幂(带负号),将它加上1,得到的便是取值范围的下限。