Я понимаю, что RVO позволяет копировать, среди прочего, временные и локальные переменные, но как насчет элементов данных?
Чтобы сфокусироваться на вопросе, какой из следующих трех вариантов является лучшим способом написать получатель констант для члена данных (учитывая RVO и C++11)?
class Widget { /* some large user-defined class */ };
class C
{
public:
const Widget& getWidget1() const { return w; }
const Widget getWidget2() const { return w; }
Widget getWidget3() const { return w; }
private:
Widget w;
};
const Widget getWidget2() const
плохо,const
перед возвращаемым значением запрещает семантику перемещения - person TemplateRex   schedule 08.03.2016C{}.getWidget1()
? - person TemplateRex   schedule 08.03.2016const Widget& getWidget() const { return w; }
ноWidget takeWidget() { return std::move(w); }
- person Jarod42   schedule 08.03.2016const Widget& getWidget() const &
- person TemplateRex   schedule 08.03.2016