반응형

열거형(enum)

C++에서 고유한 유형이지만, 형식이 안전하지 않으므로 이해가 되지 않은 작업을 수행할 수 있습니다.

내부적으로 int와 동일하게 사용되기 때문에, int형 변수와 비교도 가능하며,

서로 다른 enum 끼리도 비교가 가능합니다.

예시 코드

 

결과

이러한 문제점들로 인하여 더 제약적인 enum을 만들어 낸것이 바로 enum class 이다.

 

열거형 클래스(enum class)

기존 열거형(enum)보다 더 제약적이여서 개발자의 실수로 발생할 버그버그를 방지하고자 하는 점과

스포프 문제를 해결하고자 만들어졌다.

 

스코프 문제 해결 : 스코프를 생성하는 enum class

위의 예에서 enum형 Color, APPLE은 RED, GREEN이 동일하게 정의되어 있어 컴파일 오류가 생기는 것을 볼 수 있다. 

기존의 enum은 현재의 스코프에 해당 값들을 정의하기 때문에 문제가 발생한다.

이러한 문제는 enum class로 바꾸게 되면 해결된다.

그리고 기존 enum형 처럼 사용하면 문제가 발생한다!!

Type safe enum class

이것이 바로 enum과의 차이점이다.

기존 enum은 int로 상호 변환이 내부적으로 자동 변환이 되었지만,

enum class는 내부적으로 자동 변환을 하지 않고, 오류를 발생시킨다.

이러한 부분은 기존 enum의 용도가 int를 사용하기 위함이 아니라 

목록의 항목들을 표기하기 위함이여서 좀더 제약적인 문법이 추가된 것이다.

 

 

몰랐던 사실

enum과 enum class는 크기 정의 및 기본 크기 할당이 가능하다.

선언과 정의를 할 수 있다.

반응형

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

[C/C++] accumulate 사용법과 주의사항  (0) 2021.07.09
[C/C++] stringstream 사용법  (0) 2021.07.03
[C/C++] 다형성 - 가상 함수  (0) 2020.09.10
메모리의 구조  (0) 2020.09.10
'Call by value' 와 ' Call by reference'의 차이  (0) 2020.08.31

+ Recent posts