Следуя комментарию, который я сделал по этому поводу:
передача std::vector в конструктор и семантика перемещения
Необходим ли std::move
в следующем коде, чтобы гарантировать, что возвращаемое значение является значением x?
std::vector buildVector()
{
std::vector local;
// .... build a vector
return std::move(local);
}
Насколько я понимаю, это необходимо. Я часто видел, как это используется при возврате std::unique_ptr
из функции, однако GManNickG сделал следующий комментарий:
Насколько я понимаю, в операторе return все локальные переменные автоматически являются значениями x (срок действия истекает). values) и будет перемещен, но я не уверен, относится ли это только к самому возвращаемому объекту. Так что OP должен пойти дальше и добавить это туда, пока я не буду более уверен, что этого не должно быть. :)
Кто-нибудь может пояснить, нужен ли std::move
?
Зависит ли компилятор поведения?