Я знаю, что, передавая объект по значению функции, конструктор перемещения всегда вызывается, если он есть, не предполагая, что не будет никакого разрешения на копирование. Как насчет возврата объекта по стоимости?Является ли объект гарантированно перемещаться при его возврате?
Например, у нас есть класс Foo
, который имеет конструктор перемещения, и у нас есть функция, которая возвращает объект Foo
.
Foo g() {
Foo f;
// do something with f
return f;
}
Если мы предполагаем, что нет RVO, конструктор перемещения, который, как предполагается, называется?
Обновление: Наверное, я не показывал свое намерение четко. Я просто хочу знать, что могу в худшем случае переместить объект, не скопированный. Либо RVO, либо NRVO случается, я счастлив. И я должен также сказать, что конструктор перемещения и назначение перемещения не удаляются и выполняются надлежащим образом.
Да, локальные объекты в автоматическом хранилище неявно рассматриваются как значения xvalues в операторах return. – ildjarn
@ildjarn: Я думаю, что только если вы вернете его напрямую. Где-то на SO я был исправлен, сказав, что это переместило 'f' в функцию:' return do_something (f); '. – GManNickG
@GManNickG: У меня не было времени на стандартное или оговорки, поэтому комментарий, а не ответ. Я думаю, ты прав. : -] – ildjarn