Heim > Backend-Entwicklung > C++ > Warum kann ich auf der rechten Seite von C-Operatoren keine Initialisierungslisten verwenden?

Warum kann ich auf der rechten Seite von C-Operatoren keine Initialisierungslisten verwenden?

Mary-Kate Olsen
Freigeben: 2024-12-09 01:19:13
Original
701 Leute haben es durchsucht

Why Can't I Use Initializer Lists on the Right-Hand Side of C   Operators?

Operatorüberladung und Initialisierungslisten auf RHS

In der C-Programmierung sind Initialisierungslisten eine prägnante Syntax zum Initialisieren von Aggregatobjekten mit einer Liste von Ausdrücken . Während Initialisierungslisten bequem in verschiedenen Szenarien verwendet werden können, war ihre Verwendung auf der rechten Seite (RHS) der Operatoren ein Diskussionspunkt.

Warum Initialisierungslisten auf der rechten Seite (RHS) eingeschränkt sind

C 11 erlaubt keine Initialisierungslisten auf der RHS von Operatoren, einschließlich des binären Operators << in Ihrem Code verwendet. Es gibt einige Gründe für diese Einschränkung:

  • Initialisiererlisten sind keine Ausdrücke:Nach dem C-Standard gelten Initialisiererlisten nicht als Ausdrücke. Argumente binärer Operatoren sind typischerweise Ausdrücke, und die für Ausdrücke definierte Grammatik schließt Initialisierungslisten aus.
  • Parser-Herausforderungen: Das Zulassen von Initialisierungslisten auf der linken Seite (LHS) von Operatoren stellt eine grammatikalische Herausforderung dar . Die Standardgrammatik für Ausdrücke könnte mehrdeutig werden, wenn sie Initialisierungslisten sowohl in der linken als auch der rechten Position zulässt.

Ausnahmen für Initialisierungslisten

Trotz der allgemeinen Einschränkung Durch die Verwendung von Initialisierungslisten in Operatorargumenten definiert C bestimmte Ausnahmen, in denen sich Initialisierungslisten befinden akzeptiert:

  • Als Argumente für Funktionen
  • Als Indizes in Array-Zugriffsausdrücken
  • Als Argumente für Konstruktoren
  • In Rückgabeanweisungen
  • Als Initialisierer in Variablendefinitionen

In Ihrem Code können Sie Verwenden Sie eine Initialisierungsliste als Argument für den Balkenkonstruktor, der innerhalb von << aufgerufen wird. Operator:

foo baz;
baz << bar{1, -2, "foo", 4, 5}; // Legal
Nach dem Login kopieren

Gründe für die Einschränkung

Die Entscheidung, Initialisierungslisten auf der RHS von Operatoren einzuschränken, ergibt sich aus dem Wunsch, eine konsistente und klare Grammatik beizubehalten. Das Zulassen von Initialisierungslisten in allen Kontexten hätte zu zusätzlicher Komplexität und potenzieller Mehrdeutigkeit in der Sprache geführt.

Wie in dem in Ihrer Frage erwähnten Diskussionspapier erwähnt, wurde die Alternative in Betracht gezogen, Initialisierungslisten auf der RHS, aber nicht auf der LHS zuzulassen zu problematisch. Daher wurde der konservative Ansatz gewählt, Initialisierungslisten nur in bestimmten Kontexten zuzulassen.

Das obige ist der detaillierte Inhalt vonWarum kann ich auf der rechten Seite von C-Operatoren keine Initialisierungslisten verwenden?. 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