Heim >Backend-Entwicklung >C++ >Warum können Klassendatenelemente nicht mit der in geschweifte Klammern eingeschlossenen Syntax initialisiert werden?
Warum die direkte Initialisierungssyntax für Klassendatenelemente verboten ist
In C können Klassendatenelemente nicht mit ( )Syntax in geschweifte Klammern. Betrachten Sie den folgenden Code:
class test { public: void fun() { int a(3); std::cout << a << '\n'; } private: int s(3); // Compiler error };Die Kompilierung schlägt mit Fehlern wie:
Mehrdeutigkeiten beim Parsen zu verhindern . Wenn eine in geschweifte Klammern eingeschlossene Initialisierung zulässig wäre, könnte der Compiler möglicherweise Deklarationen in folgenden Situationen falsch interpretieren:
struct S { int i(x); // data member with initializer // Other code static int x; };Hier ist unklar, ob i(x) ein Datenmember-Initialisierer oder eine Member-Funktionsdeklaration ist, wie beide folgen die gleiche Syntax.Um diese Mehrdeutigkeit zu beseitigen, hat sich C für die folgenden Einschränkungen entschieden:
Das obige ist der detaillierte Inhalt vonWarum können Klassendatenelemente nicht mit der in geschweifte Klammern eingeschlossenen Syntax initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!