我正在舔舐伤口 Memory Error with std:ostringstream and -std=c++11? ,我有一个相关的问题。
如果以下返回临时值,则 reserve
无效且 char*
无效:
ostringstream oss;
oss.str().reserve(96);
// populate oss
const char* ptr = oss.str().c_str();
// do something with ptr
那么下面的代码如何清除 ostringstream
(来自 How to reuse an ostringstream? ):
oss.clear(); oss.str("");
我知道 clear()
会重置流的标志;但据我现在了解,str("")
将对临时字符串而不是底层字符串进行操作。
那么str("")
是如何重置流的呢?
最佳答案
这些是不同的功能。
oss.str()
(无参数)返回流的底层字符串的拷贝,但 oss.str("")
设置 其基础字符串为您传递的值(此处为空字符串:""
)。
因此在 std::stringstream
上同时调用 clear()
和 str("")
实际上有点“重置”它。
注意 cppreference 上的两个签名
关于c++ - ostringstream、.str() 和重置/清除流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285086/