kam*_*aze 20 c++ rvalue move-semantics c++11
请考虑以下示例:
#include <sstream>
template <typename T>
inline std::string to_string(T const & op) {
std::ostringstream result;
result << op;
return result.str();
}
Run Code Online (Sandbox Code Playgroud)
如果我要返回结果,而不是result.str()它将自动成为右值.不是结果中包含的字符串(我假设).我的期望是它被复制并且副本作为右值返回.
所以我的问题是,合法的是:
return std::move(result.str());
Run Code Online (Sandbox Code Playgroud)
我认为它是,期望流留下一个有效的空字符串.但我不确定实际做到这一点.
Bau*_*gen 24
std::ostream::str确实会返回内部字符串的副本.所以这一举动是合法的,但result.str()无论如何它都没有意义,因此std::move没有任何用处.如果有的话,它会阻碍RVO,所以不要这样做.(正如@TartanLlama在他的评论中正确指出的那样,"不要移动返回值"一般都是正确的,而不仅仅是在返回rvalues时.)
特别是,std::move它不会影响流的内部字符串对象.
| 归档时间: |
|
| 查看次数: |
1225 次 |
| 最近记录: |