Heim > Backend-Entwicklung > C++ > Können Elemente aus einer „std::initializer_list' verschoben werden?

Können Elemente aus einer „std::initializer_list' verschoben werden?

DDD
Freigeben: 2024-12-20 14:10:14
Original
480 Leute haben es durchsucht

Can Elements Be Moved Out of a `std::initializer_list`?

initializer_list und Move-Semantik

Der Typ initializer_list in C wird oft verwendet, um Container mit in Klammern eingeschlossenen Wertelisten zu initialisieren. Im Gegensatz zu regulären Containern folgt initializer_list jedoch nicht der Wertesemantik. Infolgedessen stellt sich eine häufige Frage:

Können Elemente aus einem std::initializer_list verschoben werden?

Die Antwort auf diese Frage lautet Nein. Der Versuch, dies zu tun, führt zu Kopien, selbst wenn das verschobene Element vom Typ „Nur verschieben“ ist. Dies liegt daran, dass die Funktionen begin() und end() von initializer_list Zeiger auf konstante Werte zurückgeben. Wenn std::move auf einen konstanten Wert angewendet wird, ist das Ergebnis eine unveränderliche R-Wert-Referenz, die nicht sinnvoll verschoben werden kann. Stattdessen wird es an einen Funktionsparameter vom Typ const T& gebunden, was zu einer Kopiersemantik führt.

Dieses Verhalten mag unerwartet erscheinen, da initializer_list eine Liste temporärer Objekte speichern soll. Es wird jedoch davon ausgegangen, dass es eine effizientere statische Initialisierung der Liste ermöglichen würde, den Typ nach Ermessen des Compilers konstant oder veränderbar zu machen.

Aktualisierung: Ein Vorschlag für die initializer_list-Unterstützung von Nur-Verschiebungs-Typen

Als Reaktion auf das Feedback wurde ein ISO-Vorschlag entworfen, um Unterstützung für Nur-Verschiebungs-Typen in initializer_list bereitzustellen. Dieser Vorschlag wird noch geprüft, bietet jedoch eine mögliche Lösung für die aktuellen Einschränkungen von initializer_list bei der Arbeit mit Nur-Verschiebungstypen.

Das obige ist der detaillierte Inhalt vonKönnen Elemente aus einer „std::initializer_list' verschoben werden?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage