In C statische Daten Mitglieder einer Klasse können nicht direkt innerhalb der Klassendefinition initialisiert werden, außer in bestimmten Fällen Fälle.
Statische Datenelemente werden im Speichersegment des Programms zugewiesen und von allen Instanzen von gemeinsam genutzt die Klasse. Der C-Standard verbietet ihre In-Class-Initialisierung, um mehrere Definitionen derselben Variablen in mehreren Übersetzungseinheiten zu verhindern.
Ähnlich gilt: Statische Arrays in einer Klasse können nicht klassenintern initialisiert werden, da Arrays einen zusammenhängenden Speicherblock belegen. Das Zulassen einer klasseninternen Initialisierung würde dazu führen, dass in jeder Übersetzungseinheit mehrere Kopien desselben Arrays erstellt würden, was zu unerwartetem Verhalten führen würde.
Eine Ausnahme von diesen Regeln gilt für statische const-Integraltypen und Aufzählungstypen. Diese Typen können in der Klasse initialisiert werden, da sie als Konstanten zur Kompilierungszeit behandelt werden und ihre Werte zum Zeitpunkt der Kompilierung bekannt sind.
Um ein statisches Array in einer Klasse zu initialisieren, können Sie den „Enum-Trick“ verwenden:
enum { arrsize = 2 };
static const int c[arrsize] = { 1, 2 };
Dieser Ansatz deklariert eine Aufzählungskonstante arrsize, um die Array-Größe zu bestimmen, die dann zum Initialisieren der statischen Konstante verwendet wird Array c.
C 11 hat diese Einschränkungen etwas gelockert. Jetzt können statische Datenelemente bestimmter Typen, sogenannte „Literaltypen“, in der Klasse mithilfe eines Klammer-oder-Gleich-Initialisierers initialisiert werden. Darüber hinaus ermöglicht C 11 die klasseninterne Initialisierung nicht statischer Datenelemente mithilfe konstanter Ausdrücke.
Das obige ist der detaillierte Inhalt vonWarum kann ich statische Mitglieder und Arrays nicht direkt in einer C-Klasse initialisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!