본문 바로가기
프로그래밍/C++

C++ ] enum class 사용법

by eteo 2023. 10. 3.

 

enum class 선언

 

enum class를 정의할 때 명시적으로 기본 타입을 지정하지 않으면 int 형으로 설정된다.

또한 첫번째 멤버의 값을 지정하지 않은 경우 첫번째 멤버는 0으로 초기화되고 그 다음 멤버는 1씩 증가한다.

 

enum class MyEnum {
    VALUE1,
    VALUE2,
    VALUE3
};

 

 

 

 

열거형 멤버 접근

 

:: 연산자를 사용해 접근한다.

 

MyEnum myVar = MyEnum::VALUE1;

 

 

정수값으로 변환

 

enum 클래스의 기본 타입이 int라고 해도 바로 정수값으로 변환되지는 않기 때문에 형변환 연산자를 사용해야 한다.

 

int intValue = 0;
MyEnum enumValue = MyEnum::VALUE1;

if (intValue == enumValue) { // 오류! 비교 불가능
    // ...
}

// 형변환 필요
int valueAsInt = static_cast<int>(myVar);

 

 

 

 

스위치문과 enum class

 

다음과 같이 사용할 수 있다.

switch (myVar) {
    case MyEnum::VALUE1:
        // 처리 코드
        break;
    case MyEnum::VALUE2:
        // 처리 코드
        break;
    case MyEnum::VALUE3:
        // 처리 코드
        break;
}

 

 

 

 

enum class의 범위제한

 

enum class는 멤버에 접근할때 항상 "enum class명::멤버"로 접근하기 때문에 다른 열거형끼리 멤버이름이 같더라도 충돌할 일은 없다.

 

enum class TrafficLight {
    RED,
    YELLOW,
    GREEN
};

enum class Signal {
    RED,
    YELLOW,
    GREEN
};

 

 

int 외 다른 정수 형식으로 enum class 정의하기

 

선언시 : 연산자 뒤에 short, char, unsigned int 등을 써서 다른 정수형식으로 지정하는 것이 가능하다. 이렇게 정수 형식을 명시하면 해당 열거형의 크기가 형식에 맞게 조절된다.

 

enum class MyShortEnum : short {
    VALUE1 = 0,
    VALUE2,
    VALUE3
};