기록공간

엄격한 열거 타입 본문

C++

엄격한 열거 타입

입코딩 2020. 4. 3. 20:10
반응형

열거 타입은 타입 세이프하지 않다. 기본적으로 정수 타입 취급을 받기 때문에 서로 완전 별개인 열거 타입 간에도 비교 연산이 가능하다. enum class를 이용하면 이러한 문제를 해결할 수 있다. 다음은 사용 예이다.

enum class MyEnum
{
	EnumValue1,
	EnumValue2 = 10,
	EnumValue3
};

MyEnum은 타입 세이프하기 때문에 열거값이 다른 정수 타입 변수로 자동으로 캐스팅되지않고 class 이름으로 스코프 설정을 하지 않으면 참조할 수도 없다. 다음과 같이 스코프 설정을 해야 사용 가능하다.

MyEnum value1 = MyEnum::EnumValue1

다음과 같이 일반 정수값과 MyEnum 값을 비교하는 것은 문법 위반이다.

if(MyEnum::EnumValue3 == 11) {...}

열거 타입은 기본적으로 int 타입 값과 연계되지만 enum class에서는 다음과 같이 값의 타입을 바꿀 수 있다.

enum class MyEnumLong : unsigned long
{
	EnumValueLong1,
	EnumValueLong2 = 10,
	EnumValueLong3
};
반응형

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

decltype 키워드  (0) 2020.04.03
자동 함수 리턴 타입 (C++14)  (0) 2020.04.03
새로운 함수 정의 문법(C++11)  (0) 2020.04.03
std::array  (0) 2020.04.03
템플릿(Template)  (0) 2019.07.02
Comments