C++/Syntax
2021. 3. 10. 21:12
열거형 (Enumerate Type)
unscoped enum
C++98
범위에 제한이 없어 모든 namespace에 선언된다.
- 따라서 이름이 중복되면 안된다.
정수 타입으로 묵시적 형변환된다.
enum
변수에 숫자를 넣으려면 캐스팅을 해야 한다.#include <iostream> enum Color { COLOR_BLACK, COLOR_RED, COLOR_BLUE, COLOR_GREEN }; int main() { using namespace std; int color_id = COLOR_RED; Color my_color1 = static_cast<Color>(color_id); Color my_color2 = static_cast<Color>(3); if (my_color1 < 2) cout << my_color1 << ' ' << my_color2 << endl; }
VS에서 작성 시
unscoped enum
을 사용했다는 경고가 발생한다.
scoped enum
enum class
C++11
영역을 제한해준다.
묵시적 형변환을 허용하지 않는다.
전방 선언 가능
C++98에서
unscoped enum
은 전방선언 불가- 컴파일러가 숨겨진 타입을 모르기 때문이다.
#include <iostream> enum class Color { COLOR_BLACK, COLOR_RED, COLOR_BLUE, COLOR_GREEN }; int main() { using namespace std; int color_id = static_cast<int>(Color::COLOR_RED); Color my_color1 = static_cast<Color>(color_id); Color my_color2 = static_cast<Color>(3); if (my_color1 < static_cast<Color>(2)) cout << static_cast<int>(my_color1) << ' ' \ << static_cast<int>(my_color2) << endl; }
숨겨진 타입(
underlying type
)이 기본적으로int
타입이다.직접 타입을 명시할 수 있다.
enum class Color : uint32_t { COLOR_BLACK, COLOR_RED, COLOR_BLUE, COLOR_GREEN };
C++11에서
unscoped enum
을 전방선언하는 방법숨겨진 타입을 직접 명시하면, 컴파일러가
enum
의 숨겨진 타입을 알 수 있으므로 가능하다.enum Color : std::uint32_t;
'C++ > Syntax' 카테고리의 다른 글
C++ 제어 흐름 (Control Flow) (0) | 2021.03.11 |
---|---|
C++ Type Alias (0) | 2021.03.11 |
C++ 형변환 (Type Conversion) (0) | 2021.03.10 |
C++ 자료형 추론 (auto, decltype) (0) | 2021.03.10 |
C++ using (0) | 2021.03.10 |