나는 서명 된 또는 서명되지 않은 열거 형의 기본 구현을 신뢰하면 안된다는 것을 읽었습니다. 이것으로부터 나는 여러분이 항상 enum 값을 그것이 비교되는 타입으로 던져야한다고 결론 지었다. 좋아요 :열거 형을 정수로 비교하기
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
}
이 방법이 가장 좋습니다.
편집 : 열거 형이 익명이면 상황이 변경됩니까?
"enum은 int 유형으로 서명되었지만 암시 적으로 unsigned int로 변환됩니다."이것은 잘못되었습니다. 범위가 지정되지 않은'enum'의 기본 유형은 가장 큰 열거 자에 맞을 수있는 정수 유형입니다. 즉, 'INT_MAX'보다 크면 'unsigned int', 'long', 'unsigned long'등이 될 수 있으며, 가장 큰 열거 자 (isn ' t 항상'unsigned int'). – Simple