본문 바로가기

C++

[C++] enum vs enum class

기존 enum은 unscoped, 범위가 없다.

그 의미는 내가 PlayerType enum에 Knight를 사용했다면, MonsterType 에서는 Knight를 사용할 수 없다.

 

하지만 enum class는 scoped, 범위가 있고 범위는 enum class 안으로 제한된다.

그래서 PlayerType, MonsterType 두 enum class에 모두 Knight를사용할 수 있다.

 

그런데 enum class는 또 하나, 암묵적인 변환이 불가능하다.

 

double value = KNIGHT; // enum 암시적 변환 허용

double value = static_cast<double>(PlayerType::Knight);
//명시적 변환만이 허용되며 앞에 enum class::을 표기해야 함
//그 이유는 enum class의 Knight은 int가 아닌 PlayerType이라는 타입으로 인식하기 때문

 

그래서 상황에 따라 편한 것을 사용하면 된다.

'C++' 카테고리의 다른 글

[C++] 오른값 참조(rvalue reference)  (0) 2022.06.25
[C++] 사용하지 않는 함수 삭제하기  (0) 2022.06.25
[C++] typedef보다 using을 사용하자.  (0) 2022.06.25
[C++] NULL은 int고 nullptr은 포인터다.  (0) 2022.06.25
[C++] auto  (0) 2022.06.25