枚举用来代替静态常量,优点就是可以确定值的范围,而常量则无法确定范围;
常量表示法:
1 const int TYPE_1 = 0; 2 const int TYPE_2 = 1; 3 const int TYPE_3 = 2; 4 5 const int ONE = 0; 6 const int TWO = 1; 7 8 bool func(int type) 9 { 10 //范围检查 11 if(type < 0 || type > 2) throw type; 12 //执行的代码 13 14 }
枚举表示法:
1 enum EType 2 { 3 TYPE_1 = 0, 4 TYPE_2 = 1, 5 TYPE_3 = 2 6 }; 7 8 enum ENum 9 { 10 ONE = 0, 11 TWO = 1 12 }; 13 14 bool func(EType type) 15 { 16 //执行的代码 17 18 }
枚举的优点就是范围检查可以去掉,有编译器帮我们检查传递的数据是否正确。并且EType作为一个唯一存在的类型,如果传递ENum::ONE是会报错的,但是这种情况在静态常量中是可以通过的。
不同于Java的枚举,C++的枚举只能赋整数值,不赋值会默认从0开始递增;
枚举的值是可以重复的,如:
1 enum EType 2 { 3 TYPE_1 = 0, 4 TYPE_2 = 0, 5 TYPE_3 = 0 6 };
这里的3个枚举只是值一致,但是任然是作为3个不同的类型存在的;
枚举的值可以作为整形直接使用但是不能赋值一个数字到枚举类型上,枚举类型应该只接收同类型的枚举值;