首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

enum 取值范围有关问题,请达人指点!

2012-02-13 
enum 取值范围问题,请达人指点!!#includeiostreamusingnamespacestdintmain(intargc,char*argv[]){enum

enum 取值范围问题,请达人指点!!
#include   <iostream>
using   namespace   std;
int   main(int   argc,   char*   argv[])
{
enum   flag{x=1,y=2,z=4,e=8};
//flag   f1=5;
flag   f2=flag(5);
flag   f3=flag(z|e);//ok,f3=12
flag   f4=flag(99);//无定义,99不在flag的范围之内  
cout < <f2 < <endl < <f3 < <endl < <f4 < <endl;
return   0;
}

以上代码来自裘宗燕翻译版的《The   C++   Programming   Language> >     By   Bjarn   Stroustrup   70页,能顺利编译连接运行

flag   f4=flag(99);//无定义,99不在flag的范围之内
这句怎么解释??


关于enum取值范围问题我越弄越糊涂,请达人指点迷津!!



[解决办法]
f4无定义?很疑惑,如果,flag存在那样的问题,那么flag应该只有4个值和12个延伸值,但是,这种解释很缺乏相应的物理基础,原因很简单:enum通常会“自动的”扩展到合适的长度(字节、整型)。
现代编译系统通常会提供一种选项将enum与int类型挂钩等同处理,使得int类型的数据可以直接的赋值给enum类型,但早期的一些编译器则将enum作为“列举”的整型处理,超出的数据一概作为非法数据,也就是说flag(5)、flag(3)都算是非有效数据,但是flag(4)|flag(2)却是允许的。

热点排行