2012-12-06 34 views
3

該標準是否保證std::less<MyEnumType>將訂購MyEnumType就好像MyEnumType的值被轉換爲適當大小的整數類型?std :: less on enums

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

回答

3

是,std::less::operator()被定義爲(§20.8.5/ 5):

operator()返回x < y

對於使用關係運算符在枚舉類型,下面的陳述(§5.9/ 2):

通常的算術轉換是在算術或枚舉類型的操作數上執行的。

對於未範圍枚舉類型,該通常的算術轉換定義爲做整體推廣。對於無作用域枚舉類型整數提升定義爲(§5/ 9):

無作用域枚舉類型,其基礎類型是不固定的(7.2)的prvalue可以被轉換爲第一以下的prvalue可以表示枚舉的所有值類型(即,在範圍b的值分鐘至b 最大如在7.2節中描述):intunsigned intlong intunsigned long intlong long int,或unsigned long long int

如果可用且需要,將使用擴展整數類型。

2

枚舉的類型被定義爲一些整數類型,它足夠大以容納枚舉的所有值。編譯器可以決定具體類型是什麼(儘管現在有一個way to control this)。但是這個類型肯定是一些整型,這意味着對於相同枚舉類型的兩個值的比較操作符的表現將與您預期的相當。