enum class(C++/CLI 및 C++/CX)
열거자라는 명명된 상수 집합으로 구성된 사용자 정의 형식인 열거형을 네임스페이스 범위에서 선언합니다.
모든 런타임
설명
C++/CX 및 C++/CLI에서는 표준 C++ enum class와 유사하지만 접근성 지정자가 추가된 public enum class 및 private enum class를 지원합니다. /clr에서는 C++11 enum class 형식이 허용되지만, C++/CX 및 C++/CLI 형식이 아닌 ISO 열거형 형식을 사용할 것인지 확인하는 경고 C4472가 생성됩니다. ISO 표준 C++ enum
키워드에 대한 자세한 내용은 열거형을 참조 하세요.
Windows Runtime
구문
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
. 이 형식은 , ,char16
char
, int16
, int
uint16
, uint32
int64
또는 .uint64
enumerator-list
열거자 이름의 쉼표로 구분된 목록입니다.
각 열거자의 값은 컴파일러에 의해 암시적으로 정의되거나 enumerator=
constant-expression을 참조하세요. 기본적으로 첫 번째 열거자의 값은 암시적으로 정의된 경우 0입니다. 암시적으로 정의된 각 후속 열거자의 값은 이전 열거자의 값 + 1입니다.
var
(선택 사항) 열거형 형식의 변수 이름입니다.
설명
자세한 내용과 예제는 열거형을 참조하세요.
컴파일러는 열거자의 값을 정의하는 상수 식을 underlying-type으로 표현할 수 없는 경우 오류 메시지를 내보냅니다. 그러나 컴파일러는 내부 형식에 적합하지 않은 값에 대해 오류를 보고하지 않습니다. 예시:
기본 형식이 숫자이고 열거자가 해당 형식의 최대값을 지정하는 경우 다음 암시적으로 정의된 열거형의 값을 나타낼 수 없습니다.
underlying-type 이
bool
이고 세 개 이상의 열거자가 암시적으로 정의될 경우 처음 두 열거자 다음의 열거자는 표현할 수 없습니다.underlying-type 이
char16
이고 열거형 값이 0xD800에서 0xDFFF까지이면 값을 표현할 수 있습니다. 그러나 이 값은 유니코드 서로게이트 쌍의 절반을 나타내므로 논리적으로 잘못된 값이며 격리에 표시되면 안 됩니다.
요구 사항
컴파일러 옵션: /ZW
공용 언어 런타임
구문
access
enum class
name [:type] { enumerator-list } var;
accessenum structname [:type] { enumerator-list } var;
매개 변수
access
열거형의 접근성입니다. public
또는 private
중 하나일 수 있습니다.
enumerator-list
열거형에서 식별자(열거자)의 쉼표로 구분된 목록입니다.
이름
열거형의 이름입니다. 관리되는 익명 열거형은 허용되지 않습니다.
type
(선택 사항) ‘식별자’의 기본 형식입니다. 부호 있거나 서명되지 않은 버전의 int
short
long
스칼라 형식 또는 . 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