Автоматически возвращаются локальные значения xvalue

Следуя комментарию, который я сделал по этому поводу:

передача 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?

Зависит ли компилятор поведения?

18
задан Community 23 May 2017 в 12:06
поделиться