enum PlayerType {
None, // 0
Knight, // 1
Archer, // 2
Mage // 3
};
int main() {
PlayerType ptype = None;
cout << ptype << endl; // => 0
cout << sizeof(PlayerType) << endl; // => 4
}
기본적으로 int형으로 간주하지만 다음과 같이 크기를 바꿀 수 있다.
enum PlayerType : short {
None, // 0
Knight, // 1
Archer, // 2
Mage // 3
};
int main() {
PlayerType ptype = None;
cout << ptype << endl; // => 0
cout << sizeof(PlayerType) << endl; // => 2
}
enum의 이름은 enum 블록 외 전역으로 퍼진다.
따라서 서로 다른 enum 블록으로 묶여도 이름이 같으면 충돌이 발생할 수 있다.
기본 enum은 'unscoped enum'이라 할 수 있다. 다음과 같이 이름을 관리해야 한다.
enum의 이름은 암묵적 변환이 이루어진다.
반면 enum class의 이름은 암묵적 변환이 금지된다.
굳이 하고 싶다면 정적 캐스팅을 하면 된다.
암묵적 변환 가능 여부는 장단점으로 나눌 수 있는 것은 아니다. 오히려 암묵적 변환이 편한 상황이 있을 수 있다.