C 11 führt klasseninterne Initialisierer ein, die es ermöglichen, Mitgliedsvariablen direkt innerhalb der Klassendefinition zu initialisieren. Diese Initialisierer müssen jedoch bestimmte Syntaxregeln einhalten.
Frage:
Warum ist es vorgeschrieben, dass klasseninterne Initialisierer entweder das Gleichheitszeichen (=) oder das geschweifte Zeichen verwenden? Klammern ({})?
Antwort:
Dies Die Anforderung dient dazu, potenzielle Unklarheiten in der Syntax zu beseitigen.
Betrachten Sie das folgende Beispiel:
class BadTimes { struct Overloaded; int Overloaded; // Legal, but unusual. int confusing(Overloaded); // <-- Ambiguous line };
Die problematische Zeile könnte auf zwei Arten interpretiert werden:
Diese Mehrdeutigkeit entsteht durch die Verwendung von Klammern, die sowohl Methodendeklarationen als auch Objektinitialisierung bezeichnen können.
Um dieses Problem zu beheben Aus Verwirrung schreibt C 11 die Verwendung von geschweiften Klammern für klasseninterne Initialisierer vor. Dies weist ausdrücklich darauf hin, dass confusing eine Mitgliedsvariable ist:
class BadTimes { struct Overloaded; int Overloaded; // Legal, but unusual. int confusing{Overloaded}; // <-- Clear initialization };
Daher müssen klasseninterne Initialisierer Gleichheitszeichen oder geschweifte Klammern verwenden, um Syntaxmissverständnisse zu vermeiden und die Lesbarkeit des Codes sicherzustellen.
Das obige ist der detaillierte Inhalt vonWarum müssen C-Klasseninitialisierer „=' oder „{}' verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!