我读过你不应该相信在被签名或未签名的情况下枚举的底层实现。从这我得出结论,你应该总是把枚举值转换成它所比较的类型。像这样:将枚举与整数进行比较
enum MyEnum { MY_ENUM_VALUE = 0 };
int i = 1;
if (i > static_cast<int>(MY_ENUM_VALUE))
{
// do stuff
}
unsigned int u = 2;
if (u > static_cast<unsigned int>(MY_ENUM_VALUE))
{
// do more stuff
}
这是最佳做法吗?
编辑:如果枚举是匿名的,情况会改变吗?
“枚举符号int类型,但它们会隐式转换为无符号整型”这是错误的。非范围的'enum'的基础类型是一个整数类型,它可以适合最大的枚举器。这意味着如果它大于'INT_MAX',它可以是'unsigned int','long','unsigned long'等。并且它隐式地转换为最小的整数类型,它可以适合最大的枚举器(它是'总是'unsigned int')。 – Simple 2014-09-11 08:55:30