Tho*_*ing 5 c++ enums language-lawyer
不标准的保证,std::less<MyEnumType>将责令MyEnumType仿佛值MyEnumType被强制转换为适当大小的整数类型?
enum MyEnumType { E1 = 0, E2 = 6, E3 = 3 };
Run Code Online (Sandbox Code Playgroud)
是的,std::less::operator()定义为(§20.8.5/ 5):
operator()回报x < y
要在枚举类型上使用关系运算符,请说明以下内容(第5.9/2条):
通常的算术转换是在算术或枚举类型的操作数上执行的.
对于未范围的枚举类型,通常的算术转换被定义为进行整数提升.未范围的枚举类型的整体提升定义为(§5/ 9):
其基础类型未固定的无范围枚举类型的prvalue(7.2)可以转换为以下第一种类型的prvalue,它们可以表示枚举的所有值(即b min到b 范围内的值)最大为7.2所述): ,
int,unsigned int,long int,unsigned long int,long long int或unsigned long long int.
如果可用且必需,将使用扩展整数类型.