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
?