Я вижу, как когда-то возвращают локальный объект, компилятор будет использовать оптимизацию возвращаемого значения. (RVO, NRVO).
Часть Стандартного благословения RVO продолжает утверждать, что если условия для RVO выполнены, но компиляторы предпочитают не выполнять copy elision, возвращаемый объект должен рассматриваться как rvalue.
Итак, мы просто пишем код следующим образом:
Widget makeWidget()
{
Widget w;
…
return w;//never use std::move(w);
}
Я никогда не вижу, чтобы кто-нибудь написал такой код:
Widget&& makeWidget()
{
Widget w;
…
return std::move(w);
}
Я знаю, что возврат ссылки lvalue локального объекта всегда неверен. Итак, возвращает ссылку rvalue локального объекта также неверно?