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()
.这是真的吗?
谢谢!
归档时间: |
|
查看次数: |
144 次 |
最近记录: |