enum class(C++/CLI 및 C++/CX)

열거자라는 명명된 상수 집합으로 구성된 사용자 정의 형식인 열거형을 네임스페이스 범위에서 선언합니다.

모든 런타임

설명

C++/CX 및 C++/CLI에서는 표준 C++ enum class와 유사하지만 접근성 지정자가 추가된 public enum classprivate enum class를 지원합니다. /clr에서는 C++11 enum class 형식이 허용되지만, C++/CX 및 C++/CLI 형식이 아닌 ISO 열거형 형식을 사용할 것인지 확인하는 경고 C4472가 생성됩니다. ISO 표준 C++ enum 키워드(keyword) 대한 자세한 내용은 열거형을 참조하세요.

Windows 런타임

구문

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

매개 변수

access
열거형의 접근성으로, public 또는 private일 수 있습니다.

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

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

(선택 사항. Windows 런타임만 해당) 열거형의 기본 형식입니다bool. 이 형식은 , ,char16char, int16, intuint16, uint32int64또는 .uint64

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

각 열거자의 값은 컴파일러에 의해 암시적으로 정의되거나 enumerator=constant-expression을 참조하세요. 기본적으로 첫 번째 열거자의 값은 암시적으로 정의된 경우 0입니다. 암시적으로 정의된 각 후속 열거자의 값은 이전 열거자의 값 + 1입니다.

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

설명

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

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

  • 기본 형식이 숫자이고 열거자가 해당 형식의 최대값을 지정하는 경우 다음 암시적으로 정의된 열거형의 값을 나타낼 수 없습니다.

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

  • underlying-typechar16이고 열거형 값이 0xD800에서 0xDFFF까지이면 값을 표현할 수 있습니다. 그러나 이 값은 유니코드 서로게이트 쌍의 절반을 나타내므로 논리적으로 잘못된 값이며 격리에 표시되면 안 됩니다.

요구 사항

컴파일러 옵션: /ZW

공용 언어 런타임

구문

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

매개 변수

access
열거형의 접근성입니다. public 또는 private 중 하나일 수 있습니다.

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

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

type
(선택 사항) ‘식별자’의 기본 형식입니다. 부호 있거나 서명되지 않은 버전의 intshortlong스칼라 형식 또는 . bool 또는 char 도 사용할 수 있습니다.

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

설명

enum 클래스enum 구조체 는 동일한 선언입니다.

열거형에는 관리되거나 또는 C++/CX 및 표준이라는 두 가지 유형이 있습니다.

다음과 같이 관리되거나 C++/CX 열거형을 정의할 수 있습니다.

public 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;

관리되는 열거자 이름(식별자)은 열거형이 정의되어 있는 범위에 삽입되지 않습니다. 열거자에 대한 모든 참조를 정규화해야 합니다(이름::식별자). 이러한 이유로, 관리되는 익명 열거형은 정의할 수 없습니다.

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

Visual Studio 2002 및 Visual Studio 2003에서는 열거자가 약하게 삽입됩니다(동일한 이름을 가진 다른 식별자가 없을 경우 바깥쪽 범위에 표시됨).

표준 C++ 열거형이 정의되어 있거나 struct없는 class 경우 컴파일 /clr 하면 열거형이 관리되는 열거형으로 컴파일됩니다. 열거형이 여전히 관리되지 않는 열거형의 의미 체계를 사용합니다. 컴파일러는 Microsoft::VisualC::NativeEnumAttribute 특성을 삽입하여 열거형을 네이티브 열거형으로 만들려는 프로그래머의 의도를 식별합니다. 다른 컴파일러에는 표준 열거형이 관리되는 열거형으로 표시됩니다.

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

Visual Studio 2002 및 Visual Studio 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);

그러나 현재 버전의 컴파일러에서는 표준 열거형이 [NativeEnumAttribute] 및 함수 서명에 대해 MSIL에서 다음을 사용하여 관리되는 열거형으로 내보내집니다.

void f(E)

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

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

요구 사항

컴파일러 옵션: /clr

예제

// 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);
}
no automatic conversion to int: b

convert to int: 1

1

1

참고 항목

.NET 및 UWP용 구성 요소 확장