[모던C++] enum class

Jin Hur·2022년 11월 14일
0

C++

목록 보기
11/18

enum 기본 사용법

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
}

1. 이름공간 관리

enum의 이름은 enum 블록 외 전역으로 퍼진다.
따라서 서로 다른 enum 블록으로 묶여도 이름이 같으면 충돌이 발생할 수 있다.

기본 enum은 'unscoped enum'이라 할 수 있다. 다음과 같이 이름을 관리해야 한다.

enum class


2. 암묵적 변환 금지

enum의 이름은 암묵적 변환이 이루어진다.

enum class

반면 enum class의 이름은 암묵적 변환이 금지된다.

굳이 하고 싶다면 정적 캐스팅을 하면 된다.

암묵적 변환 가능 여부는 장단점으로 나눌 수 있는 것은 아니다. 오히려 암묵적 변환이 편한 상황이 있을 수 있다.

0개의 댓글