Heim > Backend-Entwicklung > C++ > Hauptteil

Warum können Klassendatenelemente nicht mit der in geschweifte Klammern eingeschlossenen Syntax initialisiert werden?

Linda Hamilton
Freigeben: 2024-11-16 08:30:03
Original
628 Leute haben es durchsucht

Why Can't Class Data Members Be Initialized Using Brace-Enclosed Syntax?

Warum die direkte Initialisierungssyntax für Klassendatenelemente verboten ist

In C können Klassendatenelemente nicht mit ( )Syntax in geschweifte Klammern. Betrachten Sie den folgenden Code:

class test {
public:
    void fun() {
        int a(3);
        std::cout << a << '\n';
    }

private:
    int s(3);    // Compiler error
};
Nach dem Login kopieren
Die Kompilierung schlägt mit Fehlern wie:

    "erwarteter Bezeichner vor numerischer Konstante"
  • "erwartet ',' oder ' fehl. ..' vor numerischer Konstante"
Warum also diese Einschränkung?

Nach frühen C-Vorschlägen und Standarddiskussionen zielt das Verbot darauf ab,

Mehrdeutigkeiten beim Parsen zu verhindern . Wenn eine in geschweifte Klammern eingeschlossene Initialisierung zulässig wäre, könnte der Compiler möglicherweise Deklarationen in folgenden Situationen falsch interpretieren:

struct S {
    int i(x); // data member with initializer
    // Other code
    static int x;
};
Nach dem Login kopieren
Hier ist unklar, ob i(x) ein Datenmember-Initialisierer oder eine Member-Funktionsdeklaration ist, wie beide folgen die gleiche Syntax.

Um diese Mehrdeutigkeit zu beseitigen, hat sich C für die folgenden Einschränkungen entschieden:

    Datenelemente müssen entweder mit der Syntax = initializer-clause oder { initializer-list } initialisiert werden .
  • Mitgliedsfunktionen müssen für Deklarationen immer die () {}-Syntax verwenden.
Diese Entscheidung vermeidet Parsing-Probleme und sorgt für Klarheit im Code.

Das obige ist der detaillierte Inhalt vonWarum können Klassendatenelemente nicht mit der in geschweifte Klammern eingeschlossenen Syntax initialisiert werden?. 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