Czy powinienem zwrócić referencję rvalue (przez std :: move'ing)?

A C ++ Następny wpis na blogu powiedział to

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

JeśliA ma dostępny konstruktor kopiowania lub przenoszenia, kompilator może wybrać opcję usunięcia kopii. W przeciwnym razie, jeśliA ma konstruktora ruchu,v zostaje przeniesiony. W przeciwnym razie, jeśliA ma konstruktora kopii,v jest kopiowany. W przeciwnym razie emitowany jest błąd czasu kompilacji.

Myślałem, że powinienem zawsze zwracać wartość bezstd::move ponieważ kompilator byłby w stanie znaleźć najlepszy wybór dla użytkowników. Ale w innym przykładzie z postu na blogu

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

Tutajstd::move jest konieczne, ponieważy musi być traktowany jako lwartość wewnątrz funkcji.

Ach, moja głowa prawie wybuchła po przestudiowaniu tego wpisu na blogu. Starałem się zrozumieć rozumowanie, ale im więcej się uczyłem, tym bardziej byłem zdezorientowany. Dlaczego powinniśmy zwrócić wartość za pomocąstd::move?

questionAnswers(4)

yourAnswerToTheQuestion