Heim > Backend-Entwicklung > C++ > Warum können In-Class-Initialisierer von C 11 keine Klammern verwenden?

Warum können In-Class-Initialisierer von C 11 keine Klammern verwenden?

DDD
Freigeben: 2024-12-21 13:50:12
Original
263 Leute haben es durchsucht

Why Can't C  11 In-Class Initializers Use Parentheses?

Klasseninterne Initialisierer: Warum die Klammer-oder-Gleich-Einschränkung?

In C 11 müssen klasseninterne Initialisierer einer bestimmten Syntax entsprechen : Sie müssen entweder in geschweifte Klammern eingeschlossen sein oder direkt auf ein Gleichheitszeichen (=) folgen. Die Verwendung von Klammern ist jedoch nicht zulässig. Es ist von entscheidender Bedeutung, die Gründe für diese Anforderung zu verstehen.

Verhindern von Syntaxmehrdeutigkeiten

Die Einschränkung ergibt sich aus der Möglichkeit einer Syntaxmehrdeutigkeit. Betrachten Sie die folgende Klasse:

class AmbiguousSyntax {
    struct Overloaded;
    int Overloaded;
    
    int confusing(Overloaded);
};
Nach dem Login kopieren

Zeile 4 ist mehrdeutig, wenn Klammern für klasseninterne Initialisierer zulässig wären. Es könnte möglicherweise entweder als Deklaration einer Mitgliedsfunktion namens „confusing“ interpretiert werden, die einen Parameter vom Typ „Overloaded“ akzeptiert, oder als Definition einer „int“-Mitgliedsvariablen „confusing“, die mit dem Wert des Datenelements „Overloaded“ initialisiert wird.

Klarheit durch Klammern

Durch die Forderung nach geschweiften Klammern für klasseninterne Initialisierer, C 11 beseitigt diese Mehrdeutigkeit. Änderung des vorherigen Beispiels:

class AmbiguousSyntax {
    struct Overloaded;
    int Overloaded;
    
    int confusing{Overloaded};
};
Nach dem Login kopieren

Jetzt ist klar, dass „confusing“ ein ganzzahliges Element ist, das mit dem Wert „Overloaded“ initialisiert wurde, da die Verwendung von Klammern für Funktionsparameter nicht zulässig ist.

Diese Syntaxeinschränkung in C 11 gewährleistet eine klare Unterscheidung zwischen Funktionsdeklarationen und Mitgliedsvariablendeklarationen/-initialisierungen, wodurch die Lesbarkeit des Codes verbessert und Verwirrung bei der Interpretation vermieden wird von klasseninternen Initialisierern.

Das obige ist der detaillierte Inhalt vonWarum können In-Class-Initialisierer von C 11 keine Klammern verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage