我的理解是C++枚举根据Integral Promotion转换为整数类型。并且在Integral Promotion中,我们应该首先尝试将值转换为int
,如果该值不能由int
表示,则应使用unsigned int
:
C++ 03转换舞会:
2)....枚举类型(7.2)的右值可以转换为右值
可以代表所有值的以下第一种类型
枚举的值(即bmin至bmax范围内的值
在7.2中描述:int,unsigned int,long或unsigned long。
但是我在VC++ 2010中的测试显示了矛盾的结果:
enum {A1=60, A2=61,A3=63,A4=64,A5=66,A6=0xffffFFF1};
const bool b1 = A6 < A1;
//result b1=true;
A6
是0xffffFFF1
,应为无符号值(十进制4294967281)。并且,由于此值不能用int
表示,因此应将其转换为unsigned int
。但是很明显,在比较中使用A6
时将其转换为-15。为什么会这样呢?
最佳答案
这是MS VC++的错误。我描述了它here
尽管说明是用俄语编写的,但是您可以使用google service translation等将其翻译成英文。
在C++标准本身中,相对于枚举也存在缺陷。我也描述了
here
here可以访问有关枚举的另一参考(当前为英文)。
关于c - 转换为整数类型后,C++枚举类型的符号不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24802322/