Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
Festlegen des zugrundeliegenden Typs eines enum
Standardmäßig ist int
der zugrunde liegende Typ einer Aufzählung . Sie können jedoch den Typ angeben, der entweder eine signierte oder nicht signierte Version von int
, short
, long
, __int32
oder __int64
sein soll. 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 Enum und einem Integraltypen; ein Cast 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 Enums
Die folgenden Operatoren sind für Enumerationen in C++/CLI gültig:
Bediener |
---|
== != < > <= >= |
+ - |
| ^ & ~ |
++ -- |
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