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)却是允许的。