Woher weiß der Compiler, dass er lokale Variablen verschieben kann?

Ich bin gespannt, wie genau diese Funktion funktioniert. Betrachten Sie etwas wie

std::unique_ptr<int> f() { std::unique_ptr<int> lval(nullptr); return lval; }

Dieser Code kann auch für einen Nur-Verschieben-Typ problemlos kompiliert werden, da er vom Compiler implizit verschoben wird. Aber logischerweise würde für jeden Rückgabeausdruck das Bestimmen, ob das Ergebnis auf eine lokale Variable verweist oder nicht, das Halteproblem lösen. Wenn der Compiler einfach alle lokalen Variablen als r-Werte im Rückgabeausdruck behandelt, wäre dies als Variable problematisch kann in diesem einen Ausdruck mehrfach bezeichnet werden. Auch wenn ein Einheimischer nur einen hatteDirekte In diesem Fall können Sie nicht nachweisen, dass es keine anderen indirekten Aliase gibt.

Woher weiß der Compiler, wann er vom Rückgabeausdruck abweichen muss?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage