【C++】枚举
概述:C++枚举的说明和使用
[toc]
枚举
C++的枚举工具提供了另一种创建符号常量的方式,这种方式可以代替const
。还允许定义新类型,但必须按严格的限制执行。使用enum
的句法与struct
类似。
enum color { red, orange, blue, green, red, black}
这条语句定义了一个名为color
的新类型,它的取值范围为red, orange, blue, green, red, black
,称为符号常量,同时将0~5
分别对应于red~black
。在默认情况下,0
对应的是red
,5
对应的是black
,其他以此类推。
声明与使用
1 |
|
由此可以看出,枚举变量的赋值受到限制,与程序员的定义有关。
-
对枚举而言,它的操作符只有赋值运算符
=
,这就意味着枚举变量不能执行++、--、+、—
等等号
以外的操作。 -
枚举量是整形,可被提升为int类型,但int类型不能自动转换为枚举类型
-
枚举可以进行强制类型转换,但不确定其结果,如
cor1 = spectrum(100);
-
如果只打算使用常量,而不创建枚举类型的变量,则可以省略枚举类型的名称
enum {red,orange}
;
设置枚举的值
可以使用赋值运算符显式地来设置枚举量的值:
1 |
|
但是,指定的值必须是整数。也可以只显式的设置其中一部分的值,默认情况下,枚举的 第一个常量始终是从0
开始的,这一点需要注意。
1 |
|
这里,zero
和one
的枚举量都为0
,two
和three
都是1
。
除了可以将int
类型的值赋值给枚举量,还可以使用long
和long long
类型的值。
枚举的取值范围
现在有指定了枚举量的枚举如下所示:
1 |
|
问:
合法,虽然`6`不是枚举量,但它位于枚举定义的取值范围内。
关于取值范围的定义(参考C++ primer 第六版):
1 |
|
首先,要找出上限,需要知道枚举量的最大值。找到大于这个最大值的、最小的2的幂,将它减去1,得到的便是取值范围的上限。例如,定义的bigstep的最大值枚举值是101。在2的幂中,比这个数大的最小值为128,因此取值范围的上限为127。要计算下限,需要知道枚举量的最小值。如果它不小于0,则取值范围的下限为0∶否则,采用与寻找上限方式相同的方式,但加上负号。
例如,如果最小的枚举量为-6,而比它小的、最大的2的幂是-8(加上负号),因此下限为-7。选择用多少空间来存储枚举由编译器决定。对于取值范围较小的枚举,使用一个字节或更少的空间∶而对于包含 long类型值的枚举,则使用4个字节。
应用实例
1 |
|
输出结果:
0
1 |
|
你喜欢的颜色是红色
枚举进阶
1. 位运算支持
在使用枚举时结合到 2进制 的强大,对枚举值自由的进行异或运算。
举例一:
1 |
|
举例二:
但是在
1 |
|
2. 0值
为简单枚举提供一个 0 值枚举量,可以考虑将其命名为 None
。如果这个名对于特定的枚举不合适的时候,可以自行找一个准确的。
1 |
|
3. 用枚举代替define
在合适的情况下尽量使用枚举类型,而不是静态常量或 “#define” 值 。枚举 类型是一个具有一个静态常量集合的结构体。如果遵守这些规范,定义枚举类型,而不是带 有静态常量的结构体,您便会得到额外的编译器和反射支持,在调试代码时也能更加直观。
Good:
1 |
|
bad:
1 |
|