C++복습

C++복습) Modern C++/ enum class

PJNull 2021. 12. 24.
728x90
반응형

열거형

 

C++에는 많은 자료형이 존재하는데, 열거형은 가능한 모든 값이 기호 상수로 정의되는 자료형이다.

이 열거형은 C++11이 나오기 전까지 enum(Unscoped Enum) 키워드를 통해 정의되었다. 

C++11에 들어서면서 enumclass(Scoped Enum)가 새로 나오게 되면서 enum과 enumclass를 혼용하면서 쓰는것이 가능해졌다.

 

 

enum의 문제점

 

enum test : int
{ 
 Player=3,
 Monster,
 GM,
};

enum의 문제점은 enum안의 변수가 코드 전체에 영향을 미친다는 것이다. 즉, 해당 코드에선 더이상 Player이라는 이름은 3이라는 값 이외에는 활용이 불가능 하다.

따라서 통상적으로 enum을 사용할 경우 enum의 이름의 약자를 앞에다 붙여주는 ts_Player와 같은 형태로 사용한다.

자료형은 enum이름 옆에 :를 붙여서 가능하며 자료형을 선택하지 않을 경우 기본적으로 int로 취급한다.

 

 

enum class

 

enum class test : int
{ 
 Player=3,
 Monster,
 GM,
};

enum class test2 : int
{ 
 Player=3,
 Monster,
 GM,
};

이런식으로 enumclass는 중복되는 변수의 이름의 활용(이름공간 관리)을 허용한다. 

 

암묵적인 변환

 

enum test
{ 
 ts_Player=1,
 ts_Monster,
 ts_GM,
};

enum class test2
{ 
 Player=1,
 Monster,
 GM,
};

int main()
{
 int t=ts_Player;
 int t= test2::Player;    //error
 int t=static_cast<int>(test2::Player); 
 
}

위의 코드와 같이 enum의 경우 ts_Player는 이제 완전히 1이라는값으로 변환되어져 있으며 암묵적인 변환을 허용하기때문에 아무런 문제없이 통과가 되지만, enumclass의 Player는 객체로 인식하며 암묵적인 변환을 금지하고 있기 때문에 다른 자료형으로 활용하기 위해서는 강제 타입변환을 시켜야 활용이 가능하다.

728x90
반응형

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

C++복습) Modern C++/ override , final  (0) 2021.12.28
C++복습) Modern C++/ Delete  (0) 2021.12.26
C++복습) Modern C++/ Using  (0) 2021.12.22
C++복습) Modern C++/ Nullptr  (0) 2021.12.22
C++복습) Modern C++/ Auto  (0) 2021.12.22

댓글