Heim > Backend-Entwicklung > C++ > Können Klassendatenmitglieder direkt in C initialisiert werden?

Können Klassendatenmitglieder direkt in C initialisiert werden?

Barbara Streisand
Freigeben: 2024-11-15 02:14:02
Original
412 Leute haben es durchsucht

Can Class Data Members Be Initialized Directly in C  ?

Können Klassendatenelemente direkt initialisiert werden?

In C können Klassendatenelemente nicht mit der direkten Initialisierungssyntax () initialisiert werden, wie im folgenden Beispiel dargestellt :

#include <iostream>

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

int main() {
    test t;
    t.fun();
    return 0;
}
Nach dem Login kopieren

Die Kompilierung schlägt mit Fehlern fehl:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant
Nach dem Login kopieren

Warum? Ist dies der Fall?

Der C-Standard verbietet diese Syntax ausdrücklich für die Initialisierung von Klassendatenelementen. Frühe Vorschläge für die Einführung der Funktion nannten Parsing-Probleme als Grund.

Betrachten Sie dieses mehrdeutige Beispiel:

struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};
Nach dem Login kopieren

Der Standard schlägt eine Lösung vor:

Um Mehrdeutigkeiten zu vermeiden, erlaubt der C-Standard nur die folgende Syntax für Klassendatenmitglieder initialization:

  • = initializer-clause
  • { initializer-list }

Diese Lösung sorgt für Klarheit und vermeidet die Möglichkeit von Missverständnissen in Fällen, in denen eine Deklaration vorliegt könnte sowohl einer Objekt- als auch einer Funktionsdeklaration ähneln.

Das obige ist der detaillierte Inhalt vonKönnen Klassendatenmitglieder direkt in C 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