何时是通过右值参考返回的好时机?

时间:2015-03-30 01:42:46

标签: c++ c++11 move-semantics rvalue-reference return-value-optimization

问题

在阅读了大量关于 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

return by rvalue reference

C++11 rvalues and move semantics confusion (return statement)

Is returning by rvalue reference more efficient?

0 个答案:

没有答案