Freigeben über


Gewusst wie: Definieren und Verarbeiten von Enumerationen in C++/CLI

In diesem Thema werden Enumerationen in C++/CLI.

Angeben des zugrunde liegenden Typs einer Enumeration

Standardmäßig ist der zugrunde liegende Typ einer Enumeration int.Sie können jedoch den Typ angeben, die mit oder ohne Vorzeichen von int, von short, von long, von __int32 oder von __int64 Formulare zu sein.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

  

Wie Sie zwischen verwalteten und Standardenumerationen konvertiert

Es gibt keine Standardkonvertierung zwischen einer Enumeration und einen ganzzahligen 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

  

Operatoren und Enumerationen

Die folgenden Operatoren sind für Enumerationen in C++/CLI gültig:

Operator

! === < > <= >=

+ -

| ^ & |.

++ --

sizeof

Operatoren | ^ & | ++. -- werden nur für Enumerationen mit zugrunde liegenden ganzzahligen Typen, einschließlich bool nicht definiert.Beide Operanden müssen vom Enumerationstyp sein.

Der Compiler jedoch nicht statische oder dynamische Überprüfung des Ergebnisses eines Enumerationsvorgangs; ein Vorgang führt möglicherweise keinen Wert im Bereich von den gültigen Enumeratoren der - Enumeration.

HinweisHinweis

C++11 stellt Enumerationsklassentypen in nicht verwaltetem Code, die von anderen als verwaltete Enumerationsklassen in C++/CLI sind.Insbesondere unterstützt der Klassentyp der Enumeration C++11 dieselben Operatoren nicht wie der verwaltete Enumerationsklassentyp in C++/CLI, und C++/CLI-Quellcode muss einen Barrierefreiheitsspezifizierer in verwalteten Enumerationsklassendeklarationen bereitstellen, um sie von den nicht verwalteten Klassendeklarationen der Enumeration zu unterscheiden C++11 ().Weitere Informationen zu - Enumeration Klassen in C++/CLI, C++/CX, und C++11, finden 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
      ;
}

// 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

  

Siehe auch

Referenz

enum class