什么是枚举类型???
枚举类型的诞生,我推测是这样的:
远古时期,一群程序猿聚在一起编写代码
为了提高工作效率,每只程序猿只负责一小部分的代码编写
这个程序中有一部分的功能是需要辨识RGB三种颜色
程序猿小M用0表示R,1表示G,2表示B,并且非常迅捷完成了ta的部分,
然而ta的同伴们在看ta的代码时,并搞不清楚0,1,2的具体意义
程序猿小M就需要挨个向ta的同伴们解释,因此感到十分烦躁
小M就想:为什么我们不能给这些数字起个名字,就叫“R”,“G”,“B”
这样就方便多了呀
于是,就有了enum
枚举类型长什么样???
enum < 枚举类型名 > {枚举值表}
例如:
enum Day{SUN,MON,TUE,WED,THU,FRI,SAT};
enum Month{JAN,FEB,MAR,APR,MAY,JUN,JUL,AUG,SEO,OCT,NOV,DEC};
在这里我们注意到了一个奇怪的潜规则:
- 枚举类型首字母大写
- 枚举值全文大写
这个定义干了一件什么事呢???
enum Day{SUN,MON,TUE,WED,THU,FRI,SAT};
叫做枚举值
每个枚举值都对应一个整型值
通常第一个枚举值对应常量值0,第二个对应1,一次递增类推
SUN=0,MON=1,TUE=2,WED=3,THU=4,FRI=5,SAT=6
在定义枚举类型时,也可以指定枚举值对应的常量,后续值依次递增类推
enum Day{SUN=7,MON=1,TUE,WED,THU,FRI,SAT};
//
SUN=7,MON=1,TUE=2,WED=3,THU=4,FRI=5,SAT=6
注意
枚举值表中枚举值不能同名,但是可以对应相同的整型常量值
enum Test{A=3,B,C=3,D,A};
//error
enum Test{A=3,B,C=3,D=1,E};
//okk
A=3,B=4,C=3,D=1,E=2
变量声明方法???
我们在定义一个enum的时候,实际上是自定义一种崭新的数据类型
数据类型就需要声明变量:
enum Test tt;
//or
Test tt;
使用方法???
enum Test{A=3,B,C=3,D=1,E};
tt=A;
//okk
//tt=3;
tt=3;
//error!!!
tt=static_cast<Test>(5);
//okk
//tt=5;
//数值不一定要是Test中已定义的
简单说两句???
归根结底,枚举类型enum实际上就是一个数集
所有定义为该类型的变量:
- 一定是个整型
- 只能取定义时声明过的整数值
- 不能用数字赋值,只能用数字对应的标志赋值
- 可以进行整型的关系运算(==,>,<,>=,<=)
你问我enum的作用?
也许就是提高了代码可读性吧。。。
(感谢前辈程序猿小M /手动狗头)