我理解的是,C++枚举类型会根据整数提升进行转换。在整数提升期间,应首先尝试将值转换为
C++03 conv.prom:
2) .... 枚举类型(7.2)的右值可以转换为以下第一个类型的右值,该类型可以表示枚举中的所有值(即在7.2中描述的范围bmin到bmax中的值):int、unsigned int、long或unsigned long。
但我在VC++2010中的测试结果显示相矛盾:
int
,如果该值无法用int
表示,则应使用unsigned int
:C++03 conv.prom:
2) .... 枚举类型(7.2)的右值可以转换为以下第一个类型的右值,该类型可以表示枚举中的所有值(即在7.2中描述的范围bmin到bmax中的值):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。为什么会这样呢?