В новой книге Скотта Мейера он предлагает пример использования для спецификаторов ссылок rvalue, которые выглядят примерно так:
class Widget {
private:
DataType values;
public:
DataType& data() & { return values; }
DataType data() && { return std::move(values); } // why DataType?
};
Итак, чтобы:
auto values = makeWidget().data();
move-constructs values
вместо копирования-конструирования.
Почему rvalue-ref-qual data()
возвращает DataType
вместо DataType&&
? auto
все равно выводит DataType
в этом случае (хотя decltype(auto)
не будет - но это не может быть единственной причиной, чтобы предпочесть возвращать значение вместо ravlue ref). Этот одобренный ответ возвращает rvalue ref, что делает меня концептуально понятным.