Heim >Backend-Entwicklung >C++ >Warum können Initialisierungslisten nicht direkt auf der rechten Seite von C-Operatoren verwendet werden?

Warum können Initialisierungslisten nicht direkt auf der rechten Seite von C-Operatoren verwendet werden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-23 11:14:14348Durchsuche

Why Can't Initializer Lists Be Directly Used on the Right-Hand Side of C   Operators?

Initialisatorlisten und die rechte Seite von Operatoren

Initialisatorlisten sind eine praktische Möglichkeit, Variablen und Objekte zu initialisieren, ihre Verwendung ist jedoch sehr einfach auf der rechten Seite der Operatoren eingeschränkt. Dies kann rätselhaft sein, da es logisch erscheint, Initialisierungslisten in solchen Kontexten zuzulassen.

Gründe für die Einschränkung

Nach dem C-Standard werden Initialisierungslisten nicht berücksichtigt Ausdrücke. Da Argumente für Operatoren im Allgemeinen Ausdrücke erfordern, sind reine Initialisierungslisten verboten.

Ausnahmen

Es gibt einige Ausnahmen, die die Verwendung von Initialisierungslisten zulassen:

  • Als Argumente für Funktionen
  • In tiefgestellten Ausdrücken
  • Auf der rechte Seite von Zuweisungen

Begründung

Das C 11-Standardkomitee hat beschlossen, Initialisierungslisten auf der linken Seite von Operatoren nicht zuzulassen, um den Parser zu vereinfachen Durchführung. Sie auf der rechten Seite zuzulassen wäre zu inkonsistent gewesen, ohne sie auch auf der linken Seite zuzulassen.

Alternativen

Glücklicherweise gibt es Alternativen zur Verwendung Initialisierungslisten auf der rechten Seite der Operatoren. Eine Möglichkeit besteht darin, die Initialisierungsliste in Klammern zu setzen, wodurch sie in einen R-Wert-Referenzausdruck umgewandelt wird:

baz << (std::initializer_list<int>{1, -2, "foo", 4, 5});

Eine andere Möglichkeit besteht darin, eine temporäre Variable des entsprechenden Typs zu erstellen und sie mit der Initialisierungsliste zu initialisieren:

auto data = bar{1, -2, "foo", 4, 5};
baz << data;

Obwohl diese Alternativen möglicherweise nicht so praktisch sind wie die direkte Verwendung von Initialisierungslisten, bieten sie eine Problemumgehung für die Einschränkung auf der rechten Seite von Operatoren.

Das obige ist der detaillierte Inhalt vonWarum können Initialisierungslisten nicht direkt auf der rechten Seite von C-Operatoren verwendet werden?. 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