Heim  >  Artikel  >  Backend-Entwicklung  >  Warum ist die direkte Initialisierungssyntax für Klassendatenmitglieder in C verboten?

Warum ist die direkte Initialisierungssyntax für Klassendatenmitglieder in C verboten?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-17 02:08:03186Durchsuche

Why is Direct Initialization Syntax Forbidden for Class Data Members in C  ?

Warum die direkte Initialisierungssyntax für Klassendatenelemente verboten ist

C-Klassendatenelemente können nicht mit der direkten Initialisierungssyntax initialisiert werden (Ausdruck- Liste) aufgrund möglicher Mehrdeutigkeiten beim Parsen. Dies wird im bereitgestellten Beispiel deutlich:

class test {
    private:
        int s(3); // Compiler error
};

Der Compiler löst Fehler aus:

  • "erwarteter Bezeichner vor numerischer Konstante"
  • "erwartet ',' oder '...' vor numerischer Konstante"

Gemäß C-Standards können Datenelemente nur mit initialisiert werden Folgende Syntax:

  • Zuweisungsinitialisierung: = initializer-clause
  • Klammerinitialisierung: { initializer-list }

Gründe dafür Einschränkung

Die direkte Initialisierungssyntax wurde für Klassendatenmitglieder absichtlich weggelassen, um Mehrdeutigkeiten zu vermeiden. Das Parsen der folgenden Deklarationen könnte eine Herausforderung darstellen:

struct S {
    int i(x); // data member with initializer?
    static int x;
};

struct T {
    int i(x); // member function declaration?
    typedef int x;
};

Wenn die direkte Initialisierungssyntax zulässig wäre, wäre unklar, ob int i(x) ein Datenelement mit einem Initialisierer oder eine Elementfunktionsdeklaration darstellt. Diese Mehrdeutigkeit würde sich auch auf Vorlagen auswirken.

Um dieses Parsing-Problem zu lösen, hat das C-Standards-Komitee beschlossen, die direkte Initialisierungssyntax für Klassendatenmitglieder zu verbieten und sie für Funktionsdeklarationen und lokale Variablen zu reservieren.

Das obige ist der detaillierte Inhalt vonWarum ist die direkte Initialisierungssyntax für Klassendatenmitglieder in C verboten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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