C++经典知识拾遗
第003篇:枚举类型的使用
文章目录
1.枚举类型的定义
C++的enum工具提供了一种创建符号常量的方式 (还有宏定义和const限定符),这种方式可以代替const和宏定义,它还允许定义新类型,但必须按严格的限制进行,使用enum的句法与使用结构体相似:
如下面的语句:
enum spectrum{
red, orange, yellow, green, blue, violet, indigo, ultraviolet};
cout << red << endl;
cout << green << endl;
运行结果为:
上边那条声明语句完成两项工作:
1.让spectrum成为新类型的名称,此时spectrum被称为枚举( enumeration)类型,就像struct变量被称为结构类型一样。
2.将red , orange , yellow等作为符号常量,它们对应整数值0~7,这些常量叫作枚举量( enumerator ),在默认情况下编译器将整数值赋给枚举量,第一个枚举量的值为0,第二个枚举量的值为1,依次类推。
直接输出就能看到对应的值,这就是最简单的定义及使用。
2.设置枚举量的值
前边说过,枚举定义时默认对应的整数值从0开始,那么如何设置自己想要的值呢?
可以使用赋值运算符来显式地设置枚举量的值:
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。在C++早期的版本中,只能将int值(或提升为int 的值)赋给枚举量,但这种限制取消了,现在可以使用long甚至 long long类型的值(注意,都是整型)。
3.获取枚举的取值范围
为了讲解枚举类型的赋值问题,这里有必要先讲解一下什么是枚举的取值范围。
所谓取值范围就是上界和下界两个值,那么如何求这两个值呢?
为了寻找上界,我们首先需要找到枚举量的最大值,找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是枚举类型取值范围的上界,如果没听懂没关系,我这里举一个例子:
假设有枚举定义如下:
enum bigstep{
first, second = 100,third);
在这里了,bigstep里最大值枚举值是third,也就是数字101, 在2的幂中,比这个数大的最小值为128,因此取值范围的上限为127, 要计算下限,需要知道枚举量的最小值, 如果它不小于0,则取值范围的下限为0; 否则,采用与寻找上限方式相同的方式&#