枚举

1
2
3
4
5
6
7
8
enum spectrum {red, orange, yellow, green, blue, violet, indigo, ultraviolet};

spectrum band;

band = blue // valid, blue is an enumerator
++band; // not valid
band = orange + red; // not valid
band = 2000; // invalid, 2000 not an enumerator

为了获得最大限度的可移植性,应将把非 enum 值赋给 enum 变量视为错误

枚举量是整型,可被提升为 int 类型,但 int 类型不能自动转换为枚举类型

1
2
3
int color = blue; // valid
band = 3; // invalid
color = 3 + red; // valid

可以显示设置枚举量的值

1
enum bigstep {first, second = 100, third}; // 0, 100, 101

如果 int 值有效,可以强制转换,赋给枚举变量

1
band = spectrum(3);

使用强制转换,可以将取值范围中的任何整数值赋给枚举变量,即使这个值不是枚举值

1
2
3
4
enum bits {on3 = 1, two = 2, four = 4, eight = 8};
bits myflag;

myflag = bits(6); // valid

取值范围定义如下,上限是大于最大值的最小的 2 的幂减 1,下限是,如果最小值不小于 0,则取值范围下限是 0,否则,为小于最小值的最大的 2 的幂次