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 = ITEMTYPE::WEAPON; // C++03에서는 에러
scoped enumeration은 아래와 같이 정의하고 사용합니다.
enum class ITEMTYPE : short
{
WEAPON,
EQUIPMENT,
GEM = 10,
DEFENSE,
}
사용은 아래와 같이 합니다.
그러나 아래는 에러입니다.
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은 기존과 같이 암묵적으로 정수로 변환할 수 있습니다.
그러나 scoped enumeration은 명시적으로 타입 캐스팅을 해야합니다.
참고
http://d.hatena.ne.jp/spinor/20110918/1316321563
'C++0x' 카테고리의 다른 글
| [미리 보는 C++11] 7. chrono - 1 (0) | 2011/11/16 |
|---|---|
| [미리 보는 C++11] 6. Boost 라이브러리 설치 (0) | 2011/10/12 |
| [미리 보는 C++11] 5. enum (0) | 2011/10/06 |
| [미리 보는 C++11] 4. constexpr - 2 (0) | 2011/09/23 |
| [미리 보는 C++11] 3. constexpr - 1 (0) | 2011/09/15 |
| [미리 보는 C++11] 2. override와 final (4) | 2011/08/30 |




댓글을 달아 주세요