Heim >Backend-Entwicklung >C++ >Was passiert, wenn in C ein ungültiger Wert in eine Enum-Klasse umgewandelt wird?

Was passiert, wenn in C ein ungültiger Wert in eine Enum-Klasse umgewandelt wird?

DDD
DDDOriginal
2024-12-24 20:22:12364Durchsuche

What Happens When Casting an Invalid Value to an Enum Class in C  ?

Auswirkungen der Umwandlung eines ungültigen Werts in die Enum-Klasse

Bedenken Sie den Codeausschnitt:

enum class Color : char { red = 0x1, yellow = 0x2 };
char *data = ReadFile();
Color color = static_cast<Color>(data[0]);

Was passiert wann ist data[0] 100? Gemäß den C 11- und C 14-Standards ist der resultierende Wert nicht spezifiziert, d Nach CWG 1766 ist es jetzt möglich, einen Wert außerhalb des Bereichs der Aufzählung in den Aufzählungstyp umzuwandeln Rufen Sie Undefiniertes Verhalten (UB) auf. Diese Änderung betrifft nur Compiler-Implementierungen, die den Fehler auf ihre C 11- und C 14-Kompilierungsmodi anwenden.

Integrale Heraufstufungen in Switch-Anweisungen

In einem Switch Anweisung wird die Bedingung in einen Integraltyp konvertiert. Bei Aufzählungen ohne Gültigkeitsbereich gilt diese Konvertierung für Ganzzahlen; Bei bereichsbezogenen Aufzählungen (Enum-Klasse und Enum-Struktur) erfolgt keine Heraufstufung. Unabhängig davon liegt der Bedingungswert innerhalb des Bereichs des zugrunde liegenden Typs und int, daher sollte die Standardbezeichnung weiterhin erreicht werden.

Vorsicht bei Aufzählungen ohne Gültigkeitsbereich

Für Bei Aufzählungen ohne festen zugrunde liegenden Typ kann das Umwandeln von Werten außerhalb des Bereichs zu nicht spezifiziertem Verhalten (vor CWG 1766) oder UB (nachher) führen CWG 1766). Dies wird durch die Aufzählung ColorUnfixed veranschaulicht:

Da der zugrunde liegende Typ nicht festgelegt ist, liegt der Bereich von ColorUnfixed zwischen 0 und 3, sodass 100 ein ungültiger Wert ist.

Das obige ist der detaillierte Inhalt vonWas passiert, wenn in C ein ungültiger Wert in eine Enum-Klasse umgewandelt wird?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn