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까지이면 값을 표현할 수 있습니다.그러나 이 값은 유니코드 써로게이트 쌍의 절반을 나타내므로 논리적으로 정확하지 않고 단독으로 나타나서도 안됩니다.
요구 사항
컴파일러 옵션: /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 class 및 enum 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 열거형에 대한 자세한 내용은 다음을 참조하십시오.
요구 사항
컴파일러 옵션: /clr
예제
예제
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