枚举上的std :: less

时间:2012-12-06 18:40:26

标签: c++ enums language-lawyer

标准是否保证std::less<MyEnumType>MyEnumType订购,就好像MyEnumType的值被转换为适当大小的整数类型一样?

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

2 个答案:

答案 0 :(得分:5)

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

  

operator()返回x < y

对于在枚举类型上使用关系运算符,如下所述(§5.9/ 2):

  

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

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

  

其基础类型未固定的无范围枚举类型的prvalue(7.2)可以转换为以下第一种类型的prvalue,它们可以表示枚举的所有值(即范围b中的值) min 到b max ,如7.2)所述:intunsigned intlong intunsigned long int,{{ 1}},或long long int

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

答案 1 :(得分:3)

枚举的类型被定义为一个大小足以容纳枚举的所有值的整数类型。允许编译器决定具体类型是什么(尽管现在有way to control this)。但是类型肯定是一些整数类型,这意味着相同枚举类型的两个值上的比较运算符将表现得与您期望的一样。