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

Siu*_*ji- 6 c++ rvalue-reference move-semantics return-value-optimization c++11

在阅读了大量有关右值参考的文章后,我知道:

std::string&& f_wrong()
{
    std::string s("hello");
    return std::move(s);
}
Run Code Online (Sandbox Code Playgroud)

是错的,并且:

std::string f_right()
{
    std::string s("hello");
    return s;
}
Run Code Online (Sandbox Code Playgroud)

足以使std::string(或任何移动可构造类)的移动构造函数被调用.此外,如果要使用返回值来构造对象,则应用命名返回值优化(NRVO),该对象将直接在目标地址处构造,因此不会调用移动构造函数:

std::string s = f_right();
Run Code Online (Sandbox Code Playgroud)

我的问题是:何时是通过右值引用返回的好时机?就我所能想到的而言,似乎返回一个右值引用除了像std::move()和之类的函数之外没有意义std::forward().这是真的吗?

谢谢!

参考

C++ 0x:人们理解右值引用吗?| Pizer的博客

通过右值参考返回

C++ 11 rvalues和移动语义混淆(return语句)

通过右值参考返回更有效吗?

归档时间:

查看次数:

144 次

最近记录:

10 年,6 月 前