6

标准是否保证std::less<MyEnumType>MyEnumType像将值MyEnumType转换为适当大小的整数类型一样进行排序?

enum MyEnumType { E1 = 0, E2 = 6, E3 = 3 };
4

2 回答 2

6

是的,std::less::operator()定义为(§20.8.5/5):

operator()返回x < y

对于在枚举类型上使用关系运算符,说明如下(第 5.9/2 节):

通常的算术转换是在算术或枚举类型的操作数上执行的。

对于无作用域的枚举类型,通常的算术转换被定义为进行整数提升。无范围枚举类型的整体提升定义为(§5/9):

基础类型不固定(7.2)的无作用域枚举类型的纯右值可以转换为以下第一种类型的纯右值,该类型可以表示枚举的所有值(即范围 b min到 b中的值) 7.2 中描述的最大值int): , unsigned int, long int, unsigned long int, long long int, 或unsigned long long int.

如果可用且需要,将使用扩展整数类型。

于 2012-12-06T18:53:30.867 回答
3

枚举的类型被定义为某种整数类型,它大到足以容纳枚举的所有值。允许编译器决定具体类型是什么(尽管现在有一种方法可以控制它)。但是该类型绝对是某种整数类型,这意味着对相同枚举类型的两个值的比较运算符的行为将与您预期的一样。

于 2012-12-06T18:53:01.853 回答