該標準是否保證std::less<MyEnumType>
將訂購MyEnumType
就好像MyEnumType
的值被轉換爲適當大小的整數類型?std :: less on enums
enum MyEnumType { E1 = 0, E2 = 6, E3 = 3 };
該標準是否保證std::less<MyEnumType>
將訂購MyEnumType
就好像MyEnumType
的值被轉換爲適當大小的整數類型?std :: less on enums
enum MyEnumType { E1 = 0, E2 = 6, E3 = 3 };
是,std::less::operator()
被定義爲(§20.8.5/ 5):
operator()
返回x < y
對於使用關係運算符在枚舉類型,下面的陳述(§5.9/ 2):
通常的算術轉換是在算術或枚舉類型的操作數上執行的。
對於未範圍枚舉類型,該通常的算術轉換定義爲做整體推廣。對於無作用域枚舉類型整數提升定義爲(§5/ 9):
無作用域枚舉類型,其基礎類型是不固定的(7.2)的prvalue可以被轉換爲第一以下的prvalue可以表示枚舉的所有值類型(即,在範圍b的值分鐘至b 最大如在7.2節中描述):
int
,unsigned int
,long int
,unsigned long int
,long long int
,或unsigned long long int
。
如果可用且需要,將使用擴展整數類型。
枚舉的類型被定義爲一些整數類型,它足夠大以容納枚舉的所有值。編譯器可以決定具體類型是什麼(儘管現在有一個way to control this)。但是這個類型肯定是一些整型,這意味着對於相同枚舉類型的兩個值的比較操作符的表現將與您預期的相當。