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