A С++ Следующий пост в блоге сказал, что
A compute(…)
{
A v;
…
return v;
}
Если A
имеет доступный конструктор копирования или перемещения, компилятор может выбрать вариант копирования. В противном случае, если A
имеет конструктор перемещения, перемещается v
. В противном случае, если A
имеет конструктор копирования, копируется v
.
В противном случае испускается ошибка времени компиляции.
Я думал, что всегда должен возвращать значение без std::move
потому что компилятор сможет найти лучший выбор для пользователей. Но в другом примере из сообщения в блоге
Matrix operator+(Matrix&& temp, Matrix&& y)
{ temp += y; return std::move(temp); }
Здесь std::move
необходимо, так как y
должно рассматриваться как lvalue внутри функции.
А, моя голова чуть не взорвалась после изучения этого сообщения в блоге. Я изо всех сил старался понять рассуждения, но чем больше я изучал, тем больше смущал меня. Зачем нам возвращать значение с помощью std::move
?