设为首页收藏本站

新微赢技术网

 找回密码
 注册
搜索
热搜: 回贴
查看: 177|回复: 9
打印 上一主题 下一主题

[求助]关于枚举的问题

[复制链接]
跳转到指定楼层
1#
发表于 2009-11-3 03:43:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在The C++ Programming Language中读到
enum flag {x=1,y=2,z=4,e=8};
flag f4=flag(99); //无定义:99不在flag的范围之内
可是我试了一下,这样做是没问题的。cout<<f4<<endl;的结果是99。
请问,这是怎么回事啊?Bjarne Stroustrup大神也会出错吗?
2#
发表于 2009-11-3 03:43:20 | 只看该作者
那句话的效果和flag f4=(flag)99;一样  是不是出现了强制的类型转换我对这个不了解  楼主考虑下
回复 支持 反对

使用道具 举报

3#
发表于 2009-11-3 03:43:22 | 只看该作者
enum flag {x=1,y=2,z=4,e=8};
flag f4=flag(99);

f4不需要在你所说的"flag范围内"
回复 支持 反对

使用道具 举报

4#
发表于 2009-11-3 03:43:23 | 只看该作者
为什么不需要呢,书上说枚举的范围是[0:2^k-1]。
回复 支持 反对

使用道具 举报

5#
发表于 2009-11-3 03:43:24 | 只看该作者
不是很理解楼上什么意思
回复 支持 反对

使用道具 举报

6#
发表于 2009-11-3 03:43:25 | 只看该作者
按照我对书的理解,枚举是有范围的,而且范围与枚举量的赋值有关。例如enum flag {x=1,y=2,z=4,e=8};范围就是 0:15。
[0:2^k-1]中的2^k-1表示的就是枚举量中最大值所对应的2的幂减一,上例中的8对应的就是2^4-1。
也不知道我这样理解对不对。
回复 支持 反对

使用道具 举报

7#
发表于 2009-11-3 03:43:27 | 只看该作者
不对。如果不定义,直接写:enum color{white,black,red,blue};
那么,这里white==0,后面依次加1
回复 支持 反对

使用道具 举报

8#
发表于 2009-11-3 03:43:28 | 只看该作者
wfpb,你说的我也知道啊。
enum flag {x=1,y=2,z=4,e=8};
一般是flag f4=x;
也可以强制
flag f4=flag(5);//0-15都可以
按道理来说
flag f4=flag(99);超过范围了应该是不允许的。
回复 支持 反对

使用道具 举报

9#
发表于 2009-11-3 03:43:29 | 只看该作者
有人告诉我这是编译器的问题,我用的是vc6.0,那位大哥用别的编译器试一试。谢谢。
回复 支持 反对

使用道具 举报

10#
发表于 2009-11-3 03:43:30 | 只看该作者
未定义不表示编译器会报错,象(i++)+(i++),也是未定义的,结果不确定。
要避免使用未定义的东西。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

申请友链|小黑屋|最新主题|手机版|新微赢技术网 ( 苏ICP备08020429号 )  

GMT+8, 2024-11-18 16:51 , Processed in 0.158726 second(s), 10 queries , Gzip On, Memcache On.

Powered by xuexi

© 2001-2013 HaiAn.Com.Cn Inc. 寰耽

快速回复 返回顶部 返回列表