Das Buch C++ Primer sagtfehlgeschlagen C++ Primer über std :: move()
Es ist wichtig zu erkennen, dass der Anruf zu bewegen Versprechen zu verstehen, dass wir nicht die Absicht, RR1 wieder zu verwenden außer um es zuzuordnen oder zu zerstören.
Dies ist nach der Zeile:
int &&rr3 = std::move(rr1);
Wie dieser Satz zu verstehen? Gibt es eine Änderung an rr1 nach dem Anruf std::move(rr1)
?
Jemand dachte dieses Problem wurde in What is std::move(), and when should it be used? gelöst Aber ich bin nicht damit einverstanden. Das Buch geschrieben "Wir können ein verschobenes Objekt zerstören und ihm einen neuen Wert zuweisen, aber wir können den Wert nicht verwenden ein verschobenes Objekt. "Ich weiß nicht, was es bedeutet, dass wir den Wert eines verschobenen Objekts nicht verwenden können." Gibt es einen Code, der das erklären kann?
Mögliche Duplikat [Was ist std :: move(), und wenn es verwendet werden soll?] (Http://stackoverflow.com/questions/3413470/what-is-stdmove-and-when- sollte es verwendet werden) – vaxquis
'std :: move' selbst ändert das Objekt nicht. Es ändert seinen * Typ *, so dass die Zuweisung "rr1" ändern kann. (Obwohl in diesem Fall nicht). Da die Zuweisung den Wert von 'rr1' ändern kann, können Sie sich danach nicht darauf verlassen. – BoBTFish
* Gibt es eine Änderung an rr1 nach dem Aufruf std :: move (rr1)? *. Nun ja. Manchmal. Das ist irgendwie der Punkt. Wenn Sie stuff * von * a * nach * b verschieben, ändern sich normalerweise sowohl a als auch b. Im C++ Fall kann sich ein * ändern * oder nicht. –