다음을 통해 공유


enum 클래스(C++ 구성 요소 확장)

열거자라는 명명된 상수 집합으로 구성된 사용자 정의 형식인 열거형을 선언합니다.

모든 런타임

설명

C++/CX 및 C++/CLI는 표준 C++ enum 클래스와 유사하지만 액세스 가능성 한정자가 추가된 public enum class 및 private enum class를 지원합니다.표준 C++ 키워드 enum에 대한 자세한 내용은 C + + 열거형 선언을 참조하십시오.

Windows 런타임

구문

access enum class enumeration-identifier [:underlying-type] { enumerator-list } [var];
access enum struct enumeration-identifier [:underlying-type] { enumerator-list } [var];

매개 변수

  • access
    열거형의 액세스 가능성은 public 또는 private이 될 수 있습니다.

  • enumeration-identifier
    열거형의 이름입니다.

  • underlying-type
    (선택 사항) 열거형의 내부 형식입니다.

    (선택 사항.Windows 런타임만 해당) 열거형의 내부 형식은 bool, char, char16, int16, uint16, int, uint32, int64 또는 uint64가 될 수 있습니다.

  • enumerator-list
    열거자 이름의 쉼표로 구분된 목록입니다.

    각 열거자의 값은 컴파일러에 의해 암시적으로 정의되거나 표기법, 열거자=상수 식에 의해 명시적으로 정의됩니다.기본적으로 암시적으로 정의된 경우 첫 번째 열거자의 값은 0입니다.각 후속 암시적으로 정의된 열거자의 값은 이전 열거자 + 1의 값입니다.

  • var
    (선택 사항) 열거형 형식의 변수 이름입니다.

설명

자세한 내용과 예제는 열거형을 참조하십시오.

컴파일러는 열거자의 값을 정의하는 상수 식을 내부 형식으로 표현할 수 없는 경우 오류 메시지를 내보냅니다.그러나 컴파일러는 내부 형식에 적절하지 않은 값에 대해서는 오류로 보고하지 않습니다.예를 들면 다음과 같습니다.

  • underlying-type이 숫자이고 열거자가 해당 형식의 최대값을 지정하는 경우 그 다음에 암시적으로 정의되는 열거형 값은 표현할 수 없습니다.

  • underlying-type이 bool인 경우 세 개 이상의 열거자가 암시적으로 정의되고 처음 두 열거자 다음의 열거자는 는 표현할 수 없습니다.

  • underlying-type이 char16이고 열거형 값이 0xD800에서 0xDFFF까지이면 값을 표현할 수 있습니다.그러나 이 값은 유니코드 써로게이트 쌍의 절반을 나타내므로 논리적으로 정확하지 않고 단독으로 나타나서도 안됩니다.

a6cskb49.collapse_all(ko-kr,VS.110).gif요구 사항

컴파일러 옵션: /ZW

공용 언어 런타임

구문

access enum class name [:type] { enumerator-list } var;
access enum struct name [:type] { enumerator-list } var;

매개 변수

  • access
    열거형의 액세스 가능성.public 또는 private이 될 수 있습니다.

  • enumerator-list
    열거형에서 식별자(열거자)의 쉼표로 구분된 목록입니다.

  • name
    열거형의 이름입니다.익명의 관리되는 열거형은 허용되지 않습니다.

  • type(선택적 요소)
    identifiers의 내부 형식입니다.int, short 또는 long의 서명되거나 서명되지 않은 버전과 같은 스칼라 형식이 될 수 있습니다.bool 또는 char도 사용할 수 있습니다.

  • var(선택적 요소)
    열거형 형식의 변수 이름입니다.

설명

enum classenum struct는 동일한 선언입니다.

열거형에는 관리와 표준이라는 두 가지 유형이 있습니다.

다음과 같이 관리되는 열거형을 정의할 수 있습니다.

enum class day {sun, mon };

또한 의미적으로 다음과 같습니다.

ref class day {
public:
   static const int sun = 0;
   static const int mon = 1;
};

다음과 같은 표준 열거형을 정의할 수 있습니다.

enum day2 {sun, mon, };

또한 의미적으로 다음과 같습니다.

static const int sun = 0;
static const int mon = 1;

관리되는 열거자 이름(identifiers)은 열거가 정의된 범위에 주입되지 않습니다. 열거자에 대한 모든 참조는 정규화되어야 합니다(name::identifier).이런 이유로 익명 관리되는 열거형을 정의할 수 없습니다.

표준 열거형의 열거자는 바깥쪽 범위에 강력하게 포함됩니다.즉, 포함 범위에 있는 열거자로 같은 이름을 가진 다른 기호가 있는 경우 컴파일러는 오류를 생성합니다.

Visual C++ 2002 및 Visual C++ 2003에서 열거자는 약하게 삽입되었습니다(이름이 같은 다른 식별자가 없는 한 바깥쪽 범위에 표시).

표준 C++ enum이 정의된 경우(클래스 또는 struct 없이) /clr을 사용하여 컴파일하면 열거형이 관리되는 enum으로 컴파일됩니다.열거형에는 여전히 관리되지 않는 열거형의 의미 체계가 있습니다.컴파일러는 열거형을 네이티브 열거형이 되도록 하려는 프로그래머의 의도를 Visual C++ 컴파일러가 인식하는 Microsoft::VisualC::NativeEnumAttribute 특성을 추가합니다.다른 컴파일러는 단순히 표준 열거형을 관리 열거형으로 간주합니다.

/clr을 사용하여 컴파일되고 명명된 표준 enum은 어셈블리에서 관리되는 enum으로 표시되며, 관리되는 다른 컴파일러가 이 enum을 사용할 수 있습니다.그러나 명명되지 않은 표준 열거형은 어셈블리에서 공개적으로 표시되지 않습니다.

Visual C++ 2002 및 Visual C++ 2003에서 함수 매개 변수에 형식으로 사용되는 표준 열거형:

// mcppv2_enum.cpp
// compile with: /clr
enum E { a, b };
void f(E) {System::Console::WriteLine("hi");}

int main() {
   E myi = b;
   f(myi);
}

함수 시그니처를 위해 MSIL에서 다음을 내보냅니다.

void f(int32);

그러나 현재 컴파일러 버전에서 표준 enum은 함수 시그니처에 대한 MSIL에서 [NativeEnumAttribute] 및 다음을 포함하여 관리되는 enum으로 내보내집니다.

void f(E)

네이티브 열거형에 대한 자세한 내용은 C++ Enumeration Declarations를 참조하십시오.

개발 환경에서 키워드를 강조 표시하고(예: enum class) F1을 누르면 키워드에 대한 F1 도움말을 볼 수 있습니다.

CLR 열거형에 대한 자세한 내용은 다음을 참조하십시오.

a6cskb49.collapse_all(ko-kr,VS.110).gif요구 사항

컴파일러 옵션: /clr

a6cskb49.collapse_all(ko-kr,VS.110).gif예제

예제

desc

// mcppv2_enum_2.cpp
// compile with: /clr
// managed enum
public enum class m { a, b };

// standard enum
public enum n { c, d };

// unnamed, standard enum
public enum { e, f } o;

int main() {
   // consume managed enum
   m mym = m::b;
   System::Console::WriteLine("no automatic conversion to int: {0}", mym);
   System::Console::WriteLine("convert to int: {0}", (int)mym);

   // consume standard enum
   n myn = d;
   System::Console::WriteLine(myn);

   // consume standard, unnamed enum
   o = f;
   System::Console::WriteLine(o);
}Optionally, copy this sequence of tags for each example you want, then populate the text nodes. That is, after section+title("Examples")+content, insert: para+embeddedLabel ("Example")+para(sample description); code(sample); para+embeddedLabel("Output"); computerOutput(sample output, including 'br' tag instead of newlines)

Output

  
  
  
  

참고 항목

개념

런타임 플랫폼의 구성 요소 확장