Warum die direkte Initialisierungssyntax für Klassendatenelemente verboten ist
C-Klassendatenelemente können nicht mit der direkten Initialisierungssyntax initialisiert werden (Ausdruck- Liste) aufgrund möglicher Mehrdeutigkeiten beim Parsen. Dies wird im bereitgestellten Beispiel deutlich:
class test { private: int s(3); // Compiler error };
Der Compiler löst Fehler aus:
Gemäß C-Standards können Datenelemente nur mit initialisiert werden Folgende Syntax:
Gründe dafür Einschränkung
Die direkte Initialisierungssyntax wurde für Klassendatenmitglieder absichtlich weggelassen, um Mehrdeutigkeiten zu vermeiden. Das Parsen der folgenden Deklarationen könnte eine Herausforderung darstellen:
struct S { int i(x); // data member with initializer? static int x; }; struct T { int i(x); // member function declaration? typedef int x; };
Wenn die direkte Initialisierungssyntax zulässig wäre, wäre unklar, ob int i(x) ein Datenelement mit einem Initialisierer oder eine Elementfunktionsdeklaration darstellt. Diese Mehrdeutigkeit würde sich auch auf Vorlagen auswirken.
Um dieses Parsing-Problem zu lösen, hat das C-Standards-Komitee beschlossen, die direkte Initialisierungssyntax für Klassendatenmitglieder zu verbieten und sie für Funktionsdeklarationen und lokale Variablen zu reservieren.
Das obige ist der detaillierte Inhalt vonWarum ist die direkte Initialisierungssyntax für Klassendatenmitglieder in C verboten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!