Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Opsommingstypen in C++/CLI hebben enkele verschillen met opsommingstypen in standaard C++. In dit artikel wordt uitgelegd hoe u C++/CLI-opsommingstypen gebruikt en hoe u kunt samenwerken met standaard opsommingstypen.
Het specificeren van het onderliggende type van een enum
Het onderliggende type van een opsomming is standaard int. U kunt echter het type opgeven als getekende of ongetekende formulieren van int, short, long, __int32, of __int64. U kunt ook char gebruiken.
// 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);
}
Uitvoer
sun
0
1
2
Omzetten tussen beheerde en standaardenumeraties
Er is geen standaardconversie tussen een enum en een integraal type; een cast is vereist.
// 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");
}
Uitvoer
a and day2 are the same
Operators en enumeratietypen
De volgende operators zijn geldig voor enums in C++/CLI:
| Operateur |
|---|
==
!=
<
>
<=
>=
|
+
-
|
|
^
&
~
|
++
--
|
sizeof |
Operators |, ^, &, , ~en ++-- worden alleen gedefinieerd voor opsommingen met integrale onderliggende typen, niet inbegrepen bool. Beide operanden moeten van het opsommingstype zijn.
De compiler voert geen statische of dynamische controle uit van het resultaat van een enum-bewerking; een bewerking kan resulteren in een waarde die niet binnen het bereik van de geldige opsommingswaarden van de enum valt.
Opmerking
C++11 introduceert enum class typen in niet-beheerde code, die aanzienlijk verschillen van beheerde enum class typen in C++/CLI. Het type C++11 enum class biedt met name geen ondersteuning voor dezelfde operators als het beheerde type in C++/CLI en C++/CLI-broncode moet een toegankelijkheidsaanduiding opgeven in beheerde enum class declaraties om deze te onderscheiden van niet-beheerde enum class declaraties (C++11enum class). Zie voor meer informatie over enum class het gebruik in C++/CLI, C++/CX en C++11 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
;
}
Bereikkwalificaties gebruiken om onderscheid te maken tussen enum en enum class waarden:
// 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);
}
Uitvoer
4
1
True