기존 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 |