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.
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.
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!