来自文章:C++ 之 enum 枚举量声明、定义、使用与强类型枚举详解 | 菜鸟教程
a
a
a
一.枚举变量的声明和定义:
(1)如何定义新数据类型 -- 枚举:
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
1.enum -- 枚举关键字
2.enumType -- 是通过关键字enum创建的新的数据类型,这种数据类型被称为枚举
3.Monday -- 是该数据类型(枚举)中定义的符号常量,被称为枚举量,默认值为0~6
a
(2)如何定义枚举类型的枚举变量:
方式1:在定义枚举类型时定义枚举变量
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} Weekday;
方式2:先定义枚举类型,后定义枚举变量(类似于 int a)
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
enumType Weekday;
a
a
a
a
a
二.用枚举量对枚举变量 / 非枚举变量赋值:
注意:枚举变量可以进行赋值运算
(1)在不进行强制类型转换的前提下,只能将枚类型定义的枚举量赋值给该枚举变量
enum enumType { a, b, c, d, e, f, g };
enumType x;
x = 1; //错误写法
x = b; //正确写法
因为在语句【x = 1】中,x是枚举变量,但1不是枚举量,所以不可以直接赋值;只有枚举量a~g可以直接给枚举变量x赋值
a
(2)可以将枚举量直接赋值给非枚举变量
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday};
int a = Monday;
这样是允许的,因为编译器识别出Monday是枚举量,于是会进行强化类型转换,把Monday转换为int值0并赋给变量a
a
a
a
a
a
三.用非枚举量对枚举变量赋值:
注意1:可以直接将枚举量赋值给枚举变量;但是不可以将非枚举量赋值给枚举变量;
注意2:虽然不可以把非枚举量直接赋值给枚举变量,但是可以通过强制类型转换的方法把实现这样的操作;
(1)进行强制类型转换的话,可以将其他数据类型的值赋给枚举变量
Weekday = enumType(2);
这句话的作用类似于:
Weekday = Wednesday;
a
a
注意3:但是不可以将一个超出枚举取值范围的值通过强制转换赋给枚举变量,会出现不可预料的结果
Weekday = enumType(20);
这样是不提倡的;结果将是不确定的,这么做不会出错,但得不到想要的结果;
a
a
a
a
a
四.对枚举变量进行算数运算:
注意1:枚举变量不可以进行算术运算,枚举变量只能进行赋值运算
注意2:枚举变量本身的值范围不可以超过枚举量的范围(Monday代表的0 ~ Sunday代表的6)
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} Weekday;
Weekday = Monday + Tuesday; //非法操作
enum enumType {Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday} Weekday;
Weekday++; //非法操作
因为如果允许这样的计算,那么这些操作很可能会导致违反类型限制,例如:
Weekday = Sunday;
Weekday++;
Weekday首先被赋予枚举量中的最后一个值Sunday(值为6),再进行递增的话Weekday增加到 7,而对于枚举类型enumType来说,7 是无效的;
a
a
注意3:虽然枚举变量本身不可以进行算数运算,但是他可以参与到算术运算中的(前提是算术运算的改值目标变量不是枚举变量)
int a;
a = 1 + Monday;
如上,这样的改值是允许的;