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:
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!