Heim > Backend-Entwicklung > C++ > Warum können wir in C keine Klammern verwenden, um klasseninterne Datenelemente zu initialisieren?

Warum können wir in C keine Klammern verwenden, um klasseninterne Datenelemente zu initialisieren?

Barbara Streisand
Freigeben: 2024-11-15 13:44:02
Original
281 Leute haben es durchsucht

Why Can't We Use Parentheses to Initialize In-Class Data Members in C  ?

In-Class-Datenelement-Initialisierungsanomalie: Eintauchen in den C-Standard

Im Gegensatz zu lokalen Datenelementen, die direkt mit () initialisiert werden können Aufgrund der Syntax widersprechen klasseninterne Datenelemente dieser praktischen Methode. Diese Besonderheit hat viele Programmierer verwirrt und Fragen nach der zugrunde liegenden Begründung aufgeworfen.

Gemäß dem C-Standard ist die direkte Initialisierung von Klassendatenmitgliedern mit () verboten, um Mehrdeutigkeiten beim Parsen zu verhindern. Stellen Sie sich das folgende Szenario vor:

class S {
public:
    int i(x); // data member with initializer
};
Nach dem Login kopieren

Ohne die Einschränkung könnte der Compiler verwirrt sein, wenn er feststellen möchte, ob sich die Deklaration auf ein Datenelement mit einem Initialisierer oder eine Elementfunktionsdeklaration bezieht.

Zum Beispiel:

struct S {
    int i(j); // member function declaration
    int j; // data member without an initializer
};
Nach dem Login kopieren

Die Anwendung der bestehenden Parsing-Regel, die Elementfunktionen gegenüber Datenelementen in mehrdeutigen Situationen Vorrang einräumt, könnte zu falschen Interpretationen führen. Um solche Verwirrung zu vermeiden, hat sich der C-Standard dafür entschieden, die direkte Initialisierung von Klassendatenmitgliedern nicht zuzulassen.

Trotzdem sind weiterhin alternative Initialisierungsmethoden verfügbar, wie zum Beispiel die Verwendung der = initializer-clause-Syntax:

int s = 3;
Nach dem Login kopieren

Oder die in geschweifte Klammern eingeschlossene Initialisierungsliste:

int s{3};
Nach dem Login kopieren

Durch die Einhaltung dieser Methoden können Programmierer Klassendatenelemente effektiv initialisieren, wenn auch mit einer anderen Syntax als ihre lokalen Gegenstücke.

Das obige ist der detaillierte Inhalt vonWarum können wir in C keine Klammern verwenden, um klasseninterne Datenelemente zu initialisieren?. 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