C++23: Implizites Move ohne std::move
Move in C++ without a std:move

In diesem Beitrag zeigt Andreas Fertig, wie C++23 das Verschieben von Rückgabewerten vereinfacht. Während in C++20 bei Funktionen, die Rvalue-Referenzen zurückgeben, oft ein manuelles std::move nötig war, übernimmt der Compiler in C++23 diese Aufgabe automatisch. Das macht Code nicht nur kürzer, sondern auch performanter, da unnötige Kopien vermieden werden. Fertig argumentiert, dass std::move nur selten benötigt wird und dass C++23 diese Regel noch konsequenter unterstützt.
Sobald Sie Ihren Compiler auf C++23 umstellen, führen beide Fälle ein implizites Move aus – kein std::move erforderlich.
- sprocketz
Was macht NVRO so viel schwieriger zu implementieren? Warum konnten sie nicht vorschreiben, dass es wie RVO gemacht wird? Spezialisieren Compiler buchstäblich nur auf eine einfache return-Anweisung einer direkten Konstruktion oder so?
- fluoridation
Leider glaube ich nicht, dass man darum herumkommt, Wertesemantik zu verstehen, um das korrekte und/oder performante Verhalten zu erhalten.
- tom_
Falls der Autor das liest: Beide komplizierten Beispiele sind dasselbe.