我的理解是根据Integral Promotion将C ++枚举转换为整数类型。在积分促销期间,我们应首先尝试将值转换为int
,如果值无法由int
表示,则应使用unsigned int
:
C ++ 03 conv.prom:
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。为什么会这样?