找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 183|回复: 9

[求助]关于枚举的问题

[复制链接]
发表于 2009-11-3 03:43:19 | 显示全部楼层 |阅读模式 IP:江苏扬州
我在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大神也会出错吗?
发表于 2009-11-3 03:43:20 | 显示全部楼层 IP:江苏扬州
那句话的效果和flag f4=(flag)99;一样  是不是出现了强制的类型转换我对这个不了解  楼主考虑下
回复

使用道具 举报

发表于 2009-11-3 03:43:22 | 显示全部楼层 IP:江苏扬州
enum flag {x=1,y=2,z=4,e=8};
flag f4=flag(99);

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

使用道具 举报

发表于 2009-11-3 03:43:23 | 显示全部楼层 IP:江苏扬州
为什么不需要呢,书上说枚举的范围是[0:2^k-1]。
回复

使用道具 举报

发表于 2009-11-3 03:43:24 | 显示全部楼层 IP:江苏扬州
不是很理解楼上什么意思
回复

使用道具 举报

发表于 2009-11-3 03:43:25 | 显示全部楼层 IP:江苏扬州
按照我对书的理解,枚举是有范围的,而且范围与枚举量的赋值有关。例如enum flag {x=1,y=2,z=4,e=8};范围就是 0:15。
[0:2^k-1]中的2^k-1表示的就是枚举量中最大值所对应的2的幂减一,上例中的8对应的就是2^4-1。
也不知道我这样理解对不对。
回复

使用道具 举报

发表于 2009-11-3 03:43:27 | 显示全部楼层 IP:江苏扬州
不对。如果不定义,直接写:enum color{white,black,red,blue};
那么,这里white==0,后面依次加1
回复

使用道具 举报

发表于 2009-11-3 03:43:28 | 显示全部楼层 IP:江苏扬州
wfpb,你说的我也知道啊。
enum flag {x=1,y=2,z=4,e=8};
一般是flag f4=x;
也可以强制
flag f4=flag(5);//0-15都可以
按道理来说
flag f4=flag(99);超过范围了应该是不允许的。
回复

使用道具 举报

发表于 2009-11-3 03:43:29 | 显示全部楼层 IP:江苏扬州
有人告诉我这是编译器的问题,我用的是vc6.0,那位大哥用别的编译器试一试。谢谢。
回复

使用道具 举报

发表于 2009-11-3 03:43:30 | 显示全部楼层 IP:江苏扬州
未定义不表示编译器会报错,象(i++)+(i++),也是未定义的,结果不确定。
要避免使用未定义的东西。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-9-30 15:25 , Processed in 0.231174 second(s), 12 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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