In C können Klassendatenelemente nicht mit der direkten Initialisierungssyntax () initialisiert werden, wie im folgenden Beispiel dargestellt :
#includeclass test { public: void fun() { int a(3); std::cout Die Kompilierung schlägt mit Fehlern fehl:
11 9 [Error] expected identifier before numeric constant 11 9 [Error] expected ',' or '...' before numeric constantWarum ist das so?
Der C-Standard verbietet diese Syntax ausdrücklich für Initialisierung von Klassendatenmitgliedern. 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 die Initialisierung von Klassendatenmitgliedern:
- = initializer-clause
- { initializer-list }
Diese Lösung sorgt für Klarheit und vermeidet mögliche Missverständnisse in Fällen, in denen eine Deklaration sowohl einem Objekt als auch einer Funktion ähneln könnte Erklärung.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3