Syntaxeinschränkung für klasseninterne Initialisierer
In C 11 können klasseninterne Initialisierer nur das Gleichheitszeichen (=) oder Curly verwenden Klammern {}, um Mitgliedern Werte zuzuweisen. Warum ist das so?
Mehrdeutigkeitsminderung
Die Syntax der geschweiften Klammern erzwingt eine eindeutige Interpretation des Codes. Betrachten Sie dieses Beispiel:
class Example { struct Inner; int member; int conflicting(Inner); // Function declaration or member initialization? };
Ohne die Einschränkung durch geschweifte Klammern könnte der Codeausschnitt mehrdeutig sein. Die erste Zeile könnte entweder als Funktionsdeklaration oder als Member-Initialisierung mithilfe von Klammern interpretiert werden.
class Example { struct Inner; int member; int conflicting{Inner}; // Clearly a member initialization };
Die geschweiften Klammern verdeutlichen, dass es sich bei „conflicting“ um ein Member handelt, das mit dem Wert „Inner“ initialisiert wurde.
Zusätzliche Klarheit
Die Verwendung von geschweiften Klammern sorgt auch für zusätzliche Klarheit, indem Mitgliedsdeklarationen und Initialisierungen getrennt werden. Dies kann die Lesbarkeit verbessern und das Risiko von Missverständnissen verringern.
Das obige ist der detaillierte Inhalt vonWarum sind In-Class-Initialisierer in C 11 auf „=' und „{}' beschränkt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!