Heim >Backend-Entwicklung >C++ >Können C-Enums vorwärts deklariert werden und wenn ja, wie und wann?
Vorwärtsdeklaration von Aufzählungen, eine Funktion, die es uns ermöglicht, die vollständige Definition eines Aufzählungstyps auf zu verschieben später im Code ist in bestimmten Szenarien eine wünschenswerte Funktion. In C wurde diese Funktionalität jedoch bis zur Einführung von C 11 nicht unterstützt.
Grund für die Einschränkung:
In C 03 und früheren Versionen waren Aufzählungen implizit Die Größe richtet sich nach ihrem Inhalt. Das bedeutete, dass der Compiler den vollständigen Satz von Enum-Werten kennen musste, um den richtigen Speichertyp zu bestimmen. Da die Forward-Deklaration nur den Enum-Namen angibt, war es nicht möglich, die Größe des Enums abzuleiten, daher das Verbot.
C 11 Forward-Deklaration:
C 11 führte das Konzept ein, die Größe einer Aufzählung mithilfe der Aufzählung explizit anzugeben:
enum Enum2 : unsigned int; // Legal in C++11, size explicity specified
Darüber hinaus bietet das in C 11 eingeführte Schlüsselwort enum class auch eine Möglichkeit, Deklarationsaufzählungen weiterzuleiten, da es einen Standardwert zuweist Typ „int“ zur Aufzählung.
enum class Enum3; // Legal in C++11, default type is "int"
Alternative Ansätze:
Wenn eine Vorwärtsdeklaration aus Gründen der Abwärtskompatibilität oder aus anderen Gründen nicht möglich ist, gibt es alternative Ansätze, um eine ähnliche Kapselung zu erreichen:
Fazit:
Vorwärtsdeklaration von Aufzählungen ist in C 11 und späteren Versionen möglich durch explizite Angabe der Enum-Größe. In früheren Versionen von C können alternative Techniken eingesetzt werden, um eine ähnliche Kapselung zu erreichen.
Das obige ist der detaillierte Inhalt vonKönnen C-Enums vorwärts deklariert werden und wenn ja, wie und wann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!