Andernfalls werden zurückgegebene R-Werte (temporär) verschoben (wenn möglich) und sogar lokale L-Werte (benannt) werden ebenfalls verschoben.
Übergebene Funktionsparameter Werte werden vom Aufrufer erstellt – sind keine Kandidaten für RVO – und werden ähnlich wie lokale L-Werte verschoben.
Vom Aufrufer verschobene Funktionsparameter (sowie als Referenz übergebene Funktionsparameter) scheinen für eine implizite Verschiebungsrückgabe nicht geeignet zu sein.
Da NRVO/RVO nicht möglich ist, gibt es irgendwelche Nachteile bei einer expliziten Verschiebung eines Rückgabewerts, der selbst ein verschobener Funktionsparameter ist? Es kann die noch bessere Optimierung von RVO, wie ich es verstehe, nicht blockieren. Sind die obigen Aussagen falsch?
[Tests mit GNU C++17 unterstützen die Theorie, dass eine implizite Verschiebung bei Rückgabe von in die Funktion verschobenen Parametern nicht durchgeführt wird – beweisen es mir aber nicht].
Beispiel:
Code: Select all
T foo(T&& t) { return std::move(t); }
Mobile version