Visual Studio 2010 공식 팀 블로그 @vsts2010

Posted by 흥배

unscoped enumeration scoped enumeration

C++11(새로운 C++ 표준의 이름) enum은 지금(C++03)과 다르게 두 가지의 enum이 있습니다.

바로 unscoped enumeration scoped enumeration 입니다.

 

unscoped enumeration은 기존의 enum과 비슷한 것 이라고 생각 하면 되고, scoped enumeration C++11에서 새로 생긴 enum 입니다.

 

unscoped enumeration은 아래와 같이 정의하고 사용합니다.

enum ITEMTYPE : short

{

   WEAPON,

   EQUIPMENT,

   GEM       = 10,

   DEFENSE,  // C++03까지는 에러이지만 C++11에서는 에러가 아님

};

 

사용은 아래와 같이

short ItemType = WEAPON;

또는

short ItemType = ITEMTYPE::WEAPON; // C++03에서는 에러

 

 

scoped enumeration은 아래와 같이 정의하고 사용합니다.

enum class ITEMTYPE : short

{

   WEAPON,

   EQUIPMENT,

   GEM       = 10,

   DEFENSE, 

}

 

사용은 아래와 같이 합니다.

short ItemType = ITEMTYPE::WEAPON;

그러나 아래는 에러입니다.

short ItemType = WEAPON;  // 에러

 

scoped enumeration unscoped enumeration와 다르게 ITEMTYPE를 생략하면 안됩니다. WEAPON이나 GEM ITEMTYPE의 범위 안에 있음을 가리킵니다.

그리고 enum class 대신 enum struct을 사용해도 괜찮습니다. 또 타입을 지정하지 않으면 기본으로 int 타입이 됩니다.

 

 

 

전방 선언

unscoped enumeration scoped enumeration 둘 다 전방 선언을 할 수 있습니다.

 

아래와 같이합니다.

enum ITEMTYPE : short;

enum class ITEMTYPE : short;

 

전방 선언을 할 때 unscoped enumeration은 타입 선언을 생략할 수 없지만 scoped enumeration은 타입 선언을 생략 할 수 있습니다.

 

 

 

형 변환

unscoped enumeration은 기존과 같이 암묵적으로 정수로 변환할 수 있습니다.

int i = WEAPON;

그러나 scoped enumeration은 명시적으로 타입 캐스팅을 해야합니다.

int i = static_cast<int>(ITEMTYPE::WEAPON);

 

 

 


참고

http://d.hatena.ne.jp/spinor/20110918/1316321563

 


저작자 표시
크리에이티브 커먼즈 라이선스
Creative Commons License

댓글을 달아 주세요