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();
}
如果我要返回结果,而不是result.str()它将自动成为右值.不是结果中包含的字符串(我假设).我的期望是它被复制并且副本作为右值返回.
所以我的问题是,合法的是:
return std::move(result.str());
我认为它是,期望流留下一个有效的空字符串.但我不确定实际做到这一点.
Bau*_*gen 24
std::ostream::str确实会返回内部字符串的副本.所以这一举动是合法的,但result.str()无论如何它都没有意义,因此std::move没有任何用处.如果有的话,它会阻碍RVO,所以不要这样做.(正如@TartanLlama在他的评论中正确指出的那样,"不要移动返回值"一般都是正确的,而不仅仅是在返回rvalues时.)
特别是,std::move它不会影响流的内部字符串对象.
| 归档时间: | 
 | 
| 查看次数: | 1225 次 | 
| 最近记录: |