C++ 열거형 (Enumerate Type)

2021. 3. 10. 21:12·C++/Syntax

열거형 (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
'C++/Syntax' 카테고리의 다른 글
  • C++ 제어 흐름 (Control Flow)
  • C++ Type Alias
  • C++ 형변환 (Type Conversion)
  • C++ 자료형 추론 (auto, decltype)
Caniro
Caniro
  • Caniro
    Minimalism
    Caniro
  • 전체
    오늘
    어제
    • 분류 전체보기 (317)
      • Algorithm (13)
        • 알기 쉬운 알고리즘 (10)
        • Search (1)
        • Sort (2)
      • Arduino (0)
      • C++ (185)
        • Class (46)
        • Exception (6)
        • Library (51)
        • Overloading (10)
        • SmartPointer (5)
        • Syntax (33)
        • TBC++ (23)
        • Templates (9)
        • VisualStudio (2)
      • Embedded (1)
      • Git (4)
      • Java (5)
      • Linux (16)
        • Error (1)
        • Linux Structure (11)
      • MacOS (7)
      • OS (1)
        • Concurrency (1)
      • Python (21)
        • Class (1)
        • Function (2)
        • Syntax (17)
      • Raspberrypi (9)
      • Review (1)
      • Utility (12)
        • VSCode (5)
        • VirtualBox (3)
      • Web (8)
        • Nginx (1)
        • React (3)
        • Django (1)
      • Windows (20)
        • Registry (3)
        • WSL (1)
        • DeviceDriver (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    windows
    vscode
    Solaris 10
    java
    Windows 11
    제외
    로지텍 마우스 제스처
    mspaint
    unix
    Workspace
    citrix workspace
    백기선
    KakaoTalk
    알림
    MacOS
    logi options
    시스템 복구
    윈도우
    맥북 카카오톡 알림 안뜸
    스프링 프레임워크 핵심 기술
    dism
    SFC
    윈도우 명령어
    EXCLUDE
    그림판
    SunOS 5.1
    spring
    스프링
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Caniro
C++ 열거형 (Enumerate Type)
상단으로

티스토리툴바