Vorgehensweise: Definieren und Verarbeiten von Enumerationen in C++/CLI
Enumerationstypen in C++/CLI weisen einige Unterschiede mit Enumerationstypen in C++ auf. In diesem Artikel wird erläutert, wie Sie C++/CLI-Enumerationstypen verwenden und mit Standardenumerationstypen zusammenarbeiten.
Angeben des zugrunde liegenden Typs eines enum
Standardmäßig ist int
der zugrunde liegende Typ einer Aufzählung . Sie können jedoch den Typ angeben, der signiert werden soll, oder nicht signierte Formulare von int
, short
, , long
oder __int32
__int64
. Sie können auch char
verwenden.
// mcppv2_enum_3.cpp
// compile with: /clr
public enum class day_char : char {sun, mon, tue, wed, thu, fri, sat};
int main() {
// fully qualified names, enumerator not injected into scope
day_char d = day_char::sun, e = day_char::mon;
System::Console::WriteLine(d);
char f = (char)d;
System::Console::WriteLine(f);
f = (char)e;
System::Console::WriteLine(f);
e = day_char::tue;
f = (char)e;
System::Console::WriteLine(f);
}
Ausgabe
sun
0
1
2
So konvertieren Sie zwischen verwalteten und Standardaufzählungen
Es gibt keine Standardkonvertierung zwischen einer Enumeration und einem integralen Typ; eine Umwandlung ist erforderlich.
// mcppv2_enum_4.cpp
// compile with: /clr
enum class day {sun, mon, tue, wed, thu, fri, sat};
enum {sun, mon, tue, wed, thu, fri, sat} day2; // unnamed std enum
int main() {
day a = day::sun;
day2 = sun;
if ((int)a == day2)
// or...
// if (a == (day)day2)
System::Console::WriteLine("a and day2 are the same");
else
System::Console::WriteLine("a and day2 are not the same");
}
Ausgabe
a and day2 are the same
Operatoren und Enumerationen
Die folgenden Operatoren sind für Enumerationen in C++/CLI gültig:
Operator |
---|
== != < > <= >= |
+ - |
| ^ & ~ |
++ -- |
sizeof |
Operatoren |
, , ^
, &
, ~
, ++
und --
werden nur für Enumerationen mit integralen zugrunde liegenden Typen definiert, nicht einschließlich bool
. Beide Operanden müssen vom Enumerationstyp sein.
Der Compiler führt keine statische oder dynamische Überprüfung des Ergebnisses eines Enumerationsvorgangs durch; ein Vorgang kann zu einem Wert führen, der nicht im Bereich der gültigen Enumerationsenumeratoren liegt.
Hinweis
C++11 führt enum class
Typen in nicht verwaltetem Code ein, die sich erheblich von verwalteten enum class
Typen in C++/CLI unterscheiden. Insbesondere unterstützt der C++11-Typ enum class
nicht dieselben Operatoren wie der verwaltete enum class
Typ in C++/CLI, und C++/CLI-Quellcode muss einen Barrierefreiheitsbezeichner in verwalteten enum class
Deklarationen bereitstellen, um sie von nicht verwalteten (C++11) enum class
-Deklarationen zu unterscheiden. Weitere Informationen zur enum class
Verwendung in C++/CLI, C++/CX und C++11 finden Sie unter enum class
.
// mcppv2_enum_5.cpp
// compile with: /clr
private enum class E { a, b } e, mask;
int main() {
if ( e & mask ) // C2451 no E->bool conversion
;
if ( ( e & mask ) != 0 ) // C3063 no operator!= (E, int)
;
if ( ( e & mask ) != E() ) // OK
;
}
Verwenden Sie Bereichsqualifizierer, um Zwischen enum
- und enum class
Werte zu unterscheiden:
// mcppv2_enum_6.cpp
// compile with: /clr
private enum class day : int {sun, mon};
enum : bool {sun = true, mon = false} day2;
int main() {
day a = day::sun, b = day::mon;
day2 = sun;
System::Console::WriteLine(sizeof(a));
System::Console::WriteLine(sizeof(day2));
a++;
System::Console::WriteLine(a == b);
}
Ausgabe
4
1
True
Weitere Informationen
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für