我讀過你不應該相信在被簽名或未簽名的情況下枚舉的底層實現。從這我得出結論,你應該總是把枚舉值轉換成它所比較的類型。像這樣:將枚舉與整數進行比較
enum MyEnum { MY_ENUM_VALUE = 0 };
int i = 1;
if (i > static_cast<int>(MY_ENUM_VALUE))
{
// do stuff
}
unsigned int u = 2;
if (u > static_cast<unsigned int>(MY_ENUM_VALUE))
{
// do more stuff
}
這是最佳做法嗎?
編輯:如果枚舉是匿名的,情況會改變嗎?
「枚舉符號int類型,但它們會隱式轉換爲無符號整型」這是錯誤的。非範圍的'enum'的基礎類型是一個整數類型,它可以適合最大的枚舉器。這意味着如果它大於'INT_MAX',它可以是'unsigned int','long','unsigned long'等。並且它隱式地轉換爲最小的整數類型,它可以適合最大的枚舉器(它是'總是'unsigned int')。 – Simple 2014-09-11 08:55:30