【c++】enum struct(class)란?

전 블로그

c++에서 enum을 선언 할 때 다음과 같은 선언을 본 적이 있습니까?
// どこかのheaderファイル
enum struct HogeEnum
{
  FAILURE,
  SUCCESS,
};

※struct는 class도 될 수 있다

이 struct라든지 class는 무엇일까? 라고 하는 의문이 있어 조사해 보았습니다.

struct(class)의 두 가지 의미



결론, 두 가지 의미가있을 것 같습니다.

· 다른 enum 값으로 동일한 열거자를 사용할 수 있습니다.
· int 값과의 차이를 명확하게 만든다

조금 해설



※참고
프로그래밍 언어 C++ 4판 아래와 같은 코드는 컴파일은 통과합니까? // Test.h enum Color { RED, BLUE, PURPLE, }; enum TrafficLight { RED, YELLOG, 그린 }; // Test.cpp Color c_red = Color::RED; TrafficLight t_red = TrafficLight::RED; 음, 흐름적으로 알 것 같지만 이것은 통과하지 않습니다.

그렇다면 어떻게 해야 합니까?

같은 이름의 열거자를 사용할 수 있습니다.



다음과 같이 변경하면 됩니다. (c++11 이후 [thanks for 7of9씨])

enum struct Color
{
    RED,
    BLUE,
    PURPLE,
};
enum struct TrafficLight
{
    RED,
    YELLOG,
    GREEN
};

구조를 추가했습니다.
※class에서도 통과합니다.
※ 양쪽에 struct를 추가하고 있습니다만 한쪽만 추가하는 것만으로 통과합니다.

struct를 추가함으로써, 각 열거자의 스코프가 명확한 것이 되어, 빌드가 통과하게 되었습니다.

int와의 상호 변환



struct를 추가하지 않으면 실은 그대로 대입이 가능합니다.

int red = Color::RED;

의 상태군요.

struct가 있는 경우는 다음의 형태로 상호 변환할 수 있습니다.

int => enum 값


Color enumColorRed = static_cast<Color>(0);

enum 값 => int



int intColorRed = static_cast<int>(Color::RED);

좋은 웹페이지 즐겨찾기