Dela via


Gör så här: Definiera och använda uppräkningar i C++/CLI

Uppräkningstyper i C++/CLI har vissa skillnader med uppräkningstyper i standard C++. Den här artikeln beskriver hur du använder C++/CLI-uppräkningstyper och hur du samverkar med standarduppräkningstyper.

Ange den underliggande typen av en enum

Som standard är intden underliggande typen av en uppräkning . Du kan dock ange typen som signerade eller osignerade formulär för int, short, long, __int32 eller __int64. Du kan också använda char.

// 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);
}

Resultat

sun
0
1
2

Så här konverterar du mellan hanterade och standarduppräkningar

Det finns ingen standardkonvertering mellan en uppräkning och en heltalstyp; en typomvandling krävs.

// 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");
}

Resultat

a and day2 are the same

Operatorer och uppräkningar

Följande operatorer är giltiga för uppräkningar i C++/CLI:

Operatör
== != < > <= >=
+ -
| ^ & ~
++ --
sizeof

Operatorer |, ^, &, ~, ++och -- definieras endast för uppräkningar med integrerade underliggande typer, inte inklusive bool. Båda operanderna måste vara av uppräkningstyp.

Kompilatorn utför ingen statisk eller dynamisk kontroll av resultatet av en uppräkningsåtgärd. en åtgärd kan resultera i ett värde som inte ligger inom intervallet för uppräkningens giltiga uppräknare.

Anmärkning

C++11 introducerar enum class typer i ohanterad kod som skiljer sig avsevärt från hanterade enum class typer i C++/CLI. I synnerhet stöder C++11-typen enum class inte samma operatorer som den hanterade enum class typen i C++/CLI, och C++/CLI-källkoden måste tillhandahålla en tillgänglighetsspecificerare i hanterade enum class deklarationer för att skilja dem från ohanterade (C++11) enum class -deklarationer. För mer information om enum class-användning i C++/CLI, C++/CX och C++11, se 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
      ;
}

Använd omfångskvalificerare för att skilja mellan enum och enum class värden:

// 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);
}

Resultat

4
1
True

Se även

enum class