返回一个本地对象右值引用,对还是错?

Ron*_*ang 14 c++ c++11

我看到一旦返回一个本地对象,编译器将采取返回值优化.(RVO,NRVO).

标准祝福RVO的部分接着说,如果满足RVO的条件,但编译器选择不执行复制省略,则返回的对象必须被视为右值.

所以我们只写这样的代码:

Widget makeWidget() 
{
 Widget w;
 …
 return w;//never use std::move(w);
}
Run Code Online (Sandbox Code Playgroud)

我从来没有看到有人写这样的代码:

Widget&& makeWidget()
{
 Widget w;
 …
 return std::move(w); 
}
Run Code Online (Sandbox Code Playgroud)

我知道返回本地对象的左值引用总是错误的.那么,返回一个本地对象的右值引用也是错误的?

Mik*_*our 24

返回对本地自动变量的引用总是错误的.当函数返回时,变量将被销毁,因此对引用的任何使用都将给出未定义的行为.

它是还是参考没有区别.