C++个人学习归纳:将枚举量emun用作switch标签

定义枚举量

枚举量的定义声明如下实例:

enum personsname{ Abi, Bod, Tok }; //注意名称均不用引号括起

其具有如下作用:

定义personsname为一新类型
若声明personsname类型的变量name

personsname name;

则只能赋给变量name定义枚举量personsname时设定的合法值,即

name = Abi; //允许
name = 2000; //错误的赋值,编译器会发出警报或直接编译错误
name = Bbb; //错误的赋值,没被设定为合法值,编译器会发出警报或直接编译错误
name = 2; //错误的赋值,2虽然对应Tok,但其为整型,无法直接赋给name
name = personsname(2); //允许,使用了类型强制转换将整型转为personsname类型

将设定的合法值提升为整数(作为符号常量)
此时,对应的,Abi值为0,Bob值为1,Tok值为2,若有更多,以此类推。
即,可在刚刚定义的personsname类型以外的其他地方,使用定义personsname时声明的合法值来替代整数。

int num;
num= Abi + Bob; //即num = 0 + 1;

在switch中使用枚举量

至此,由于enum枚举量将定义声明中的各个合法值提升为整数,这一声明在switch上有一定的用途

...... num=Bob; ......
switch (num)
{
 case Abi: xxxxx;
 case Bob: xxxxx;
 case Tok: xxxxx;
 default: xxxxx;
}

一般的,switch的引用量只能为整数,而其与emun枚举量搭配后,可产生在形式上“以名称来选择case”的效果。当然要意识到的,这种由名称选择case的switch本质上还是将各枚举量定义的合法值提升为整数,最后使用整数来选择case的。因此,枚举量声明的合法值与字符串不是一种东西,程序并没有将字符串提升为整数,而是将程序中的已经定义的合法值名提升为整数。要将字符串与case对应首先还得用最原始的方法(就是那个你能想到的原始方法)将字符串转化为程序中已被定义的合法值。

你可能感兴趣的:(C++个人学习归纳:将枚举量emun用作switch标签)