Я знаю, что при передаче объекта по значению в функцию всегда вызывается конструктор перемещения, если он есть, при условии отсутствия копирования. Как насчет возврата объекта по значению?
Например, предположим, что у нас есть класс Foo
, который имеет конструктор перемещения, и у нас есть функция, которая возвращает объект Foo
.
Foo g() {
Foo f;
// do something with f
return f;
}
Если предположить, что RVO отсутствует, гарантированно ли будет вызван конструктор перемещения?
Обновление: видимо, я не совсем ясно выразил свое намерение. Я просто хочу знать, что в худшем случае я могу переместить объект, а не скопировать его. Бывает либо РВО, либо НРВО, я доволен. И я также должен сказать, что конструктор перемещения и присваивание перемещения не удаляются и правильно реализованы.