在阅读了大量关于 rvalue references 的文章后,我知道:
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();
我的问题是:何时是通过右值参考返回的好时机?就我所能想到的而言,除了像std::move()
和std::forward()
这样的函数之外,似乎返回一个右值引用并不合理。这是真的吗?
谢谢!
C++0x: Do people understand rvalue references? | Pizer's Weblog
C++11 rvalues and move semantics confusion (return statement)