Heim > Backend-Entwicklung > C++ > Warum erlauben In-Class-Initialisierer von C 11 keine Klammern?

Warum erlauben In-Class-Initialisierer von C 11 keine Klammern?

Susan Sarandon
Freigeben: 2024-12-20 05:55:09
Original
166 Leute haben es durchsucht

Why Don't C  11 In-Class Initializers Allow Parentheses?

Mehrdeutigkeit in Klasseninitialisierern: Die Rolle von geschweiften Klammern und Gleichheitszeichen

In C 11 können klasseninterne Memberinitialisierer nur mit Curly definiert werden Klammern ({}) oder das Gleichheitszeichen (=). Diese Einschränkung wirft die Frage auf, warum Klammern für diesen Zweck nicht zulässig sind.

Ein Hauptgrund für diese Einschränkung liegt in der Möglichkeit einer Mehrdeutigkeit der Syntax. Betrachten Sie die folgende Klasse:

class BadTimes {
public:
    struct Overloaded;
    int Overloaded;            // Data member

    int confusing(Overloaded); // Function declaration
};
Nach dem Login kopieren

Wenn Klammern für Initialisierer zulässig wären, würde die Zeile „int confusing(Overloaded);“ könnte mehrdeutig sein. Es könnte entweder als Funktionsdeklaration (wie oben gezeigt) oder als Initialisierung einer Mitgliedsvariablen interpretiert werden, wenn Klammern für den Initialisierer verwendet würden:

int confusing{Overloaded};
Nach dem Login kopieren

Um diese Mehrdeutigkeit zu beseitigen, sind geschweifte Klammern oder das Gleichheitszeichen erforderlich . Dadurch wird sichergestellt, dass es keine Verwechslungen zwischen Initialisierern von Mitgliedsvariablen und Funktionsdeklarationen gibt:

class BadTimes {
public:
    struct Overloaded;
    int Overloaded;

    int confusing{Overloaded}; // Member variable initialized with Overloaded
};
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erlauben In-Class-Initialisierer von C 11 keine Klammern?. 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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage