Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
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