枚举类型的强制转换到底怎么用???

#ifndefGG#include<iostream>usingnamespacestd;#endifintmain(){enumbox{p=10,p1=12,p2=14... # ifndef GG
# include <iostream>
using namespace std;
# endif

int main ()
{
enum box{p=10,p1=12,p2=14};
enum box test;
test = (enum box)0;
test = 2;//错误??
cout<<test<<endl;

return 0;
}
test(enumbox)0不是强制将p,p1,p2转换为整形数的0,1,2,然后test=0就是test=p么?
如果test(enum box)0是将第0个元素p赋给test,那为什么输出test的结果是0而不是10呢?
展开
 我来答
百度网友4fc9d11e4
2017-01-21 · TA获得超过287个赞
知道小有建树答主
回答量:288
采纳率:71%
帮助的人:32.6万
展开全部
enum只是声明了一个内存空间而已,并没有赋值。其中每个元素都共享同一个内存空间。所以 enum box{p=10,p1=12,p2=14} 这句只是声明了一个空间,并没有起到赋值的作用。

test = (enum box)0; 这句才真正起到赋值的作用,意思表示test内存空间是box类型的,在这个内存空间中,赋值为0,所以运行结果肯定是0。如果是 test = p;那么就是表示赋值为p,也就是10。

test = (enum box)0; 不能理解为强制将p,p1,p2转换为整形数的0,1,2,因为p,p1,p2是在声明中就定义好数值的,在后面的使用过程中是没法改变数值的。

enum box{p=10,p1=12,p2=14}; 中p,p1,p2并不能把它们理解为变量,它们只是声明了一个常数而已,你可以理解为给常数10,12,14起了一个名称分别叫p,p1,p2。既然不是变量,那么就不能赋值,不能改变数值。
追问
那强制类型转换是怎么回事?test=(enum box)0;不是强制类型转换么?如果不能通过整形数来调动box里面的元素,那么枚举类型又有什么用呢?感觉比起用数组麻烦的多。。
追答
box里面的元素并不是变量,而是常数而已,你可以理解为给常数10,12,14起了一个名称分别叫p,p1,p2。

那么这个声明有什么用呢?就是限定了box类型的变量的取值范围,只能取值p,p1,p2这三个数,不能取其它数。

那么既然只能取值p,p1,p2这三个数,那么例如 test = 0; 这样的表达就明显是错的。那你说我就是非要取值为0,怎么办呢?那就只能类型强制转换了。类型强制转换就是专门用来干那些明知不可为而为之的事情。所以类型强制转换一般要少用,慎用。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式