c++ - ostringstream、.str() 和重置/清除流

标签 c++ string stringstream temporary-objects

我正在舔舐伤口 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/

相关文章:

c++ - 在模板类的模板成员函数中设置优先于构造函数

c - 如何组合两个字符类型变量

c++ - 清除输入缓冲区后 Stringstream 未提取

c++ - 如何将二进制文件的十六进制表示形式保存到 std::string 中?

c++ - 在派生类中重新定义 typedef?

java - 短路评估可以触发竞争条件吗?

string - 如何在字符之间获取字符串(多词)

c - 在 ANSI C 中使用指针替换字符

c++ - 使用 stringstream 提取特定标记

C++/C 检测文件夹内容何时更改并通过 HTTP 发送文件的最佳方法