Streng typisierte Aufzählungen (C++11)
Nach oben zu C++11-Features - Index
BCC32 führt bereichsabhängige Aufzählungen ein. Darüberhinaus wurden vorhandene Aufzählungen mit zugrunde liegenden Typen und expliziter Gültigkeitsbereichszuordnung erweitert. Dieses C++11-Feature wurde zu BCC32 hinzugefügt.
Bereichsabhängige Aufzählungen werden im Allgemeinen folgendermaßen charakterisiert:
- Enumeratoren befinden sich im Gültigkeitsbereich ihrer Aufzählung.
- Enumeratoren und Aufzählungen werden nicht implizit in int umgewandelt (wie bei "einfachen" Enumeratoren und Aufzählungen).
- Aufzählungen und ihre Enumeratoren können einen zugrunde liegenden Typ haben.
Inhaltsverzeichnis
Deklaration
Sie deklarieren eine bereichsabhängige Aufzählung durch Festlegen der Aufzählungsklasse (enum class) oder Aufzählungsstruktur (enum struct). Zum Beispiel:
enum class A {A1, A2, A3 = 50, A4 /* = 51 */};
Keine implizite Typumwandlung
Bei bereichsabhängigen Aufzählungen gibt es keine implizite Umwandlung in oder aus Integerwerten.
Zugrunde liegender Typ
Bei bereichsabhängigen Aufzählungen ist der zugrunde liegende Typ klar spezifiziert (die Vorgabe ist int). Sie können den zugrunde liegenden Typ der Aufzählung und aller Enumeratoren folgendermaßen festlegen: Geben Sie nach dem Namen der Aufzählung den Typ an (Sie können alle integralen Typen außer wchar_t angeben). Das folgende Beispiel deklariert eine Aufzählung mit dem zugrunde liegenden Typ unsigned long:
enum class A : unsigned long {A1 = 1, A2 = 2, Abig = 0xFFFFFFFOU };
Gültigkeitsbereichszuordnung
Eine bereichsabhängige Aufzählung führt ihren eigenen Gültigkeitsbereich ein. Die Namen der Enumeratoren befinden sich im Gültigkeitsbereich der Aufzählung und werden nicht in den umgebenden Gültigkeitsbereich eingebracht. Zum Beispiel:
enum class A { A1, A2, A3 = 100, A4 /* = 101 */ }; A a1 = A1; // error A a2 = A::A2; // OK-scope specified
Änderungen an vorhandenen Aufzählungen
Vorhandene Aufzählungen wurden folgendermaßen erweitert:
- Sie können jetzt genauso wie bei bereichsabhängigen Aufzählungen den zugrunde liegenden Typ jeder Aufzählung festlegen (indem : type zu der Deklaration hinzugefügt wird).
- Vorhandene Aufzählungen führen nun genauso wie bereichsabhängige Aufzählungen ihre eigenen Gültigkeitsbereiche ein. Die Namen der Enumeratoren werden im Gültigkeitsbereich der Aufzählung definiert und auch in den umgebenden Gültigkeitsbereich eingebracht.
Zum Beispiel:
enum B { B1, B2, B3 = 100, B4 /* = 101 */ }; B b1 = B1; // ok B b2 = B::B2; // ok
Beispiele
Die folgenden Beispiele demonstrieren Folgendes:
- Die Methode zum Aufrufen von bereichsabhängigen Enumeratoren
- Die Tatsache, dass enum class (und enum struct) nicht mit erweiterten Typ-Bezeichnern festgelegt werden können
enum class E { a, b }; enum E x1 = E::a; // OK enum class E x2 = E::a; // illegal