【发布时间】:2017-04-23 10:42:42
【问题描述】:
#include <sstream>
#include <string>
using namespace std;
template<typename T>
string ToString(const T& obj)
{
ostringstream oss;
oss << obj;
//
// oss will never be used again, so I should
// MOVE its underlying string.
//
// However, below will COPY, rather than MOVE,
// oss' underlying string object!
//
return oss.str();
}
如何移动std::ostringstream的底层字符串对象?
【问题讨论】:
-
我猜你可以通过
s = move( oss.rdbuf()->str() )[哦,我检查过,你不能],但是你有可能通过拉动来打破流代码的假设地毯从它的脚下。*。你为什么要这个? -
我认为你可以使用 C++17 中的
node handle发明一些有趣的东西:en.cppreference.com/w/cpp/container/node_handle -
这是不可能的,
std::basic_stringbuf没有义务使用std::basic_string作为其底层缓冲区(即使这是实践中的做法)。 -
@user657267:它
确实似乎有一个字符串作为缓冲区,这就是strmember functions 的全部意义所在。但它不提供对它的可变访问。嗯。 -
我知道两种使用
basic_string的实现和一种使用普通char数组的实现。
标签: c++ performance c++11 move-semantics rvalue-reference