enum과 enum class 둘 다 존재하는데
하는 역할은 비슷해보입니다.
차이가 무엇인지 알아보았습니다


enum

 

열거타입, C문법, 타입세이프하지않음, 전방선언 불가 
enum속에서 함부로 형변환이 일어남. enum속 내용물들은 다른 이넘과 (원치않은) 비교도 가능 
이렇게 위험한걸 해결하기 위해 namespace를 사용해 접근하는 방법도 과거엔 있었다고 합니다. 

 

 

enum class 

 

내용물을 사용하려면 :: 스코프 지정자로 따고 들어가야 나오기때문에 타입세이프합니다.
enum class속 내용물들은 해당 enum class "지역"한정. 함부로 형변환되지않습니다.

 

▲먼저 enum과 enum class를 비교하기 위해 임시로 만들었습니다.

 

▲ 바로 비교를 해보았습니다.구형 enum에서는 열거형 속 인자들이 단순치환수준이라, 타 변수들과 상호작용이 가능해서 위험했었고
enum class에선 접근도, 연산도 안전하게 처리 가능하게 되어있는걸 확인할 수 있었습니다.

 

 

요약 : enum의 상위호환이 enum class로, 자동 형변환이 없기에 더 안전함. 
간혹 한 클래스 내에서만 편히 접근해서 쓰기 위해 enum을 쓰기도 하지만 그 외엔..

 

enum이 존재하는 이유는 단지 구버젼 쓰는사람의 호환성을 위해서일뿐
이제는 enum class를 쓰는것이 맞습니다.

 

(참고: https://stackoverflow.com/questions/18335861/why-is-enum-class-preferred-over-plain-enum/18335954 )

'정보들 > C,C++ 관련' 카테고리의 다른 글

C와 C++차이  (0) 2020.11.20
inline 함수 vs 매크로 함수  (0) 2020.06.23
C++의 캐스팅 4가지  (0) 2020.06.23
bool vs BOOL?  (0) 2020.06.23
push_back vs emplace_back  (0) 2020.06.23

+ Recent posts