Soll ich eine rWertreferenz zurückgeben (per std :: move'ing)?

A C ++ Nächster Blogbeitrag sagte, dass

A compute(…)
{
    A v;
    …
    return v;
}

ObA Verfügt der Compiler über einen zugänglichen Kopier- oder Verschiebekonstruktor, kann er die Kopie löschen. Ansonsten, wennA hat einen Bewegungskonstruktor,v bewegt wird. Ansonsten, wennA hat einen Kopierkonstruktor,v wird kopiert. Andernfalls wird ein Fehler bei der Kompilierung ausgegeben.

Ich dachte, ich sollte den Wert immer ohne zurückgebenstd::move weil der Compiler in der Lage wäre, die beste Wahl für die Benutzer herauszufinden. Aber in einem anderen Beispiel aus dem Blogbeitrag

Matrix operator+(Matrix&& temp, Matrix&& y)
  { temp += y; return std::move(temp); }

Hier diestd::move ist notwendig, weily muss als ein Wert innerhalb der Funktion behandelt werden.

Ah, mein Kopf explodiert fast, nachdem ich diesen Blog-Beitrag gelesen habe. Ich versuchte mein Bestes, um die Argumentation zu verstehen, aber je mehr ich studierte, desto verwirrter wurde ich. Warum sollten wir den Wert mit Hilfe von zurückgeben?std::move?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage