6.枚举
6.0背景知识:符号常量的定义
1) 预处理器方式
#define INT_MAX 6200
- C++编译过程首先将源代码传递给预处理器,#define为一个预处理器编译质量,告诉处理器,在程序中查找INT_MAX,并将是u偶有的INT_MAX都替换为6200
- 预处理器查找独立的标记,跳过嵌入的单词
- #define编译指令是C语言遗留下来的
2) const关键字
const int MAX = 6200;
命名规则:
1)将整个名称大写
2)将名称首字母大写
3)以字母k打头
好处:
- 能够明确指定类型
- 能够使用C++作用域规则
- 可以用于更复杂的类型(数组或结构)
6.1 enum的使用
enum工具提供了另一种创建符号常量的方式
好处:允许定义新类型
enum spectrum{red, orange, yellow, green};
spectrum band; 声明该类型变量
- spectrum 称为新类型的名称,spectrum被称为枚举
- 将red、orange等作为符号常量,对应整数值0~3,这些常量为枚举量
6.2 enum的特性
- 在不强制类型转换情况下,只能将定义枚举时使用的枚举量赋给这种枚举的变量
- 没有为枚举定义算术运算
- 枚举量是整型(short int long longlong),可被提升为int类型,但int类型不能自动转换为枚举类型
- 若只打算使用常量,则可以省略枚举类型的名称;
band = blue;
int color = blue;
int a = 3 + blue;
band = spectrum(3);
错误使用:
band++;
band = 3;
6.3 枚举量值的设置
- 可以使用赋值运算符来显式地设置枚举量的值
enum bits{one = 1 , two = 2 , four = 4};
- 指定的值必须是==整数
- 也可以只显示定义部分枚举量的值
- 选择用多少空间存储枚举值由编译器决定,取值范围较小的枚举,一个字节或更少空间,包含long类型值,使用四个字节
enum bits2{first , second = 100, third}
first默认情况为0 , 后面没被初试话的枚举量值比前面的枚举量大1,third值为101
6.4 枚举的取值范围
每个枚举都有取值范围
通过强制类型转换,可以将取值范围中的任何整数值赋给枚举变量,即使这个值不是枚举值
取值范围定义:
- 上限:枚举量最大值为a ,找到大于a的、最小的2的幂为b,b -1即为上限
- 下限:枚举量最小值为c ,若c>=0,下限为0,否则
找到大于-c的、最小的2的幂为d,-(d -1)即为下限
a=101 ,b=128,上限为127
c=-6,d=8,下限为-7