C++的enum工具提供了一种创建符号常量的方式,可以代替const。它允许定义新类型,但有严格限制。
使用enum的句法与使用结构struct相似。
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet}; //定义
spectrum band; //声明
enum {red, orange, yellow, green, blue, violet, indigo, ultraviolet}; //定义,只用常量
枚举变量有一些特殊的属性。
spectrum band; //声明
band = orange; //有效赋值
band = 2000; //无效赋值
band = orange; //有效
++band; //无效
band = orange + red; //无效,orange + red结果为1,是int值,int不能赋给枚举型spectrum的band
int color = blue; //有效
band = 3; //无效,int值无法转换为枚举型spectrum
color = 3 + red; //有效
band = spectrum(3); //有效转换
band = spectrum(40003); //未定义的结果
赋值运算能按需要设置枚举量的值。
enum bits{one = 1, two = 2, four = 4, eight = 8};
enum bigstep{first, second = 100, third = 100, fourth}; //first默认为0,fourth为101
最初只有枚举声明中指出的那些值是有效的。然而C++现在通过强制类型转换,增加了赋给枚举变量的合法值。每个枚举都有取值范围,通过强制类型转换,可以将取值范围中的任意整数值赋给枚举变量,即使这个值不是枚举值。
enum bits{one = 1, two = 2, four = 4, eight = 8}; //取值范围0~15
enum bigstep{first = -6, second = 100, third = 122, }; //取值范围-7~127
选择用多少空间来存储枚举由编译器决定。
C++11扩展了枚举,增加了作用域内枚举。