In C können Klassendatenelemente nicht mit der direkten Initialisierungssyntax () initialisiert werden, wie im folgenden Beispiel dargestellt :
#include <iostream> class test { public: void fun() { int a(3); std::cout << a << '\n'; } private: int s(3); // Compiler error }; int main() { test t; t.fun(); return 0; }
Die Kompilierung schlägt mit Fehlern fehl:
11 9 [Error] expected identifier before numeric constant 11 9 [Error] expected ',' or '...' before numeric constant
Warum? Ist dies der Fall?
Der C-Standard verbietet diese Syntax ausdrücklich für die Initialisierung von Klassendatenelementen. Frühe Vorschläge für die Einführung der Funktion nannten Parsing-Probleme als Grund.
Betrachten Sie dieses mehrdeutige Beispiel:
struct S { int i(x); // data member with initializer or... // ... static int x; int i(y); // member function declaration // ... typedef int y; };
Der Standard schlägt eine Lösung vor:
Um Mehrdeutigkeiten zu vermeiden, erlaubt der C-Standard nur die folgende Syntax für Klassendatenmitglieder initialization:
Diese Lösung sorgt für Klarheit und vermeidet die Möglichkeit von Missverständnissen in Fällen, in denen eine Deklaration vorliegt könnte sowohl einer Objekt- als auch einer Funktionsdeklaration ähneln.
Das obige ist der detaillierte Inhalt vonKönnen Klassendatenmitglieder direkt in C initialisiert werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!