Гарантируется ли перемещение объекта при его возврате?

Я знаю, что при передаче объекта по значению в функцию всегда вызывается конструктор перемещения, если он есть, при условии отсутствия копирования. Как насчет возврата объекта по значению?

Например, предположим, что у нас есть класс Foo, который имеет конструктор перемещения, и у нас есть функция, которая возвращает объект Foo.

Foo g() {
    Foo f;

    // do something with f

    return f;
}

Если предположить, что RVO отсутствует, гарантированно ли будет вызван конструктор перемещения?

Обновление: видимо, я не совсем ясно выразил свое намерение. Я просто хочу знать, что в худшем случае я могу переместить объект, а не скопировать его. Бывает либо РВО, либо НРВО, я доволен. И я также должен сказать, что конструктор перемещения и присваивание перемещения не удаляются и правильно реализованы.

13
задан haotang 18 June 2012 в 18:04
поделиться