„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können Klassendatenmitglieder direkt in C++ initialisiert werden?

Können Klassendatenmitglieder direkt in C++ initialisiert werden?

Veröffentlicht am 18.11.2024
Durchsuche:655

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 

class test {
public:
    void fun() {
        int a(3);
        std::cout 

Die Kompilierung schlägt mit Fehlern fehl:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

Warum ist das so?

Der C-Standard verbietet diese Syntax ausdrücklich für Initialisierung von Klassendatenmitgliedern. 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;
};

Der Standard schlägt eine Lösung vor:

Um Mehrdeutigkeiten zu vermeiden, erlaubt der C-Standard nur die folgende Syntax für die Initialisierung von Klassendatenmitgliedern:

  • = initializer-clause
  • { initializer-list }

Diese Lösung sorgt für Klarheit und vermeidet mögliche Missverständnisse in Fällen, in denen eine Deklaration sowohl einem Objekt als auch einer Funktion ähneln könnte Erklärung.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3