请各位帮我分析一下,怎么枚举类型的输出结果有那么大的反差啊?
我用的是c++builder6.0我运行的结果的确是:-57;应该是199才对啊,还请路过的高手指点迷津.
//---------------------------------------
#include <vcl.h>
#pragma hdrstop
#include <iostream.h>
//---------------------------------------
#pragma argsused
int main(int argc, char* argv[])
{
enum weak
{
one=99,
two,
three
};
weak w=one;
weak y=two;
cout < <w < <endl; //输出 99;
cout < <y < <endl; //输出 100;
cout < <w+y < <endl; //输出-57,我认为应当输出199才对啊,各位请帮我分析一下.
cin.get();
return 0;
}
//---------------------------------------
[解决办法]
对于enum类型,编译器会选择可以包含所以枚举值的最小的整数类型作为它的内部表示。
对于你定义的weak枚举,它原来只有三个枚举量,值分别为:99,100和101,这完全可用一个signed char来表示,因此,你的编译器用的就是signed char来作为weak的内部表示。
于是,当你执行加法运算的时候,溢出了。
枚举本来就是为了更清晰地区分不同实体的,虽然它实质上是个整数类型,但一般还是不要用它做数学运算。如果确实需要数学运算,就别用枚举类型。