Kann der Compiler automatisch std :: move für eine letzte Verwendung von lvalue generieren?
Ein Code wie dieser wird häufig in Artikeln mit Verweisen auf r-Werte verwendet:
Dave Abrams: Bewegen Sie es mit Rvalue Referenzen
void g(X);
void f()
{
X b;
g(b); // still need the value of b
…
g( std::move(b) ); // all done with b now; grant permission to move
}
Könnte ein Compiler diese Optimierung automatisch generieren, dh zu erkennen, dass ein l-Wert ohnehin zerstört wird und verschoben werden könnte, oder wäre dies ein Verstoß gegen den Standard, wenn der Compiler in einem generischen Fall nichts darüber weiß, wie es ist Verschieben, Kopieren oder Zerstören für die X-Klasse implementiert?
Wenn eine solche Optimierung zulässig ist, wird sie in der Praxis von einem Compiler ausgeführt?