Когда лучше возвращаться по ссылкам?
Вопрос
Прочитав тонны статей о ссылках на rvalue, я узнал, что:
std::string&& f_wrong()
{
std::string s("hello");
return std::move(s);
}
неправильно и:
std::string f_right()
{
std::string s("hello");
return s;
}
достаточно для конструктора перемещения std::string
(или любые перемещаемые конструктивные классы), которые будут вызваны. Кроме того, если возвращаемое значение должно использоваться для создания объекта, применяется оптимизация именованного возвращаемого значения (NRVO), объект будет создан непосредственно по целевому адресу, поэтому конструктор перемещения не будет вызываться:
std::string s = f_right();
Мой вопрос: когда самое время возвращаться по ссылкам? Насколько я мог подумать, кажется, что возвращать ссылку на rvalue не имеет смысла, за исключением таких функций, как std::move()
а также std::forward()
, Это правда?
Спасибо!
Рекомендации
C++0x: люди понимают rvalue ссылки? | Блог Pizer
C++11 значения и путаница в семантике перемещения (оператор return)