OSTRINGSTREAM,.STR(),并重置/清除流
ostringstream, .str(), and reseting/clearing the stream
我正在使用std:oststream和-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
(如何重复使用OSTRINGSTREAM?):
oss.clear(); oss.str("");
我了解clear()
将重置流的标志;但是,正如我现在现在了解str("")
将在临时而不是基础字符串上运行。
那么str("")
如何重置流?
这些都是不同的功能。
oss.str()
(无参数)将副本返回到流的基础字符串中,但是 oss.str("")
sets 将其基础字符串返回到您传递的值(这里是一个空字符串: ""
)。
因此,在std::stringstream
上同时调用clear()
和str("")
实际上是"重置" IT。
请注意cppreference上的两个签名
无参数调用 str
返回内部字符串对象的副本。这就是为什么它是一个临时对象。使用字符串参数调用str
设置内部字符串对象的值。它在临时对象上不起作用。
似乎您是这样想的:
oss.str() = "";
,但这不是。您正在将""
传递给str
函数,以便它可以分配给内部字符串。
它与任何其他Getter/Setter组合都没有什么不同。如果您有getX()
,则通常会为您提供您打电话给的某些类成员的副本。如果您有setX(x)
,则通常设置该成员的值。在这种情况下,它们既称为str
,但是一个参数,另一个则没有。
来自此std::ostringstream::str
参考:
参数
new_str
- 基础字符串的新内容
它可用于获取字符串,也可以用于 set 函数参数提供的字符串。
- 清除前检查矢量
- Python str to C++ to Python str
- ifstream文件在从行中读取时被清除
- WINAPI 注册应用程序重新启动时不清除打开的套接字
- 为什么无论你输入什么,这"while(cin.get(str,3))"只运行一次?
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 如何清除/清空已打开的文件C++
- 解释一下 for (char c : str) 的作用?
- 返回 str vs. str.substr(0,str.size()) 在 leetcode 中给了我不同的输出
- remove(str.begin(), str.end(), );无法正常工作(我正在使用视觉工作室 2012)
- Getline(cin,str)的奇怪输出
- 如何在 c++ 中清除矢量容量?
- 可以清除递归函数中的变量吗?
- 在清除 istream 之前,我不应该需要取消获取它吗?
- 结构成员在访问时被清除
- 清除输入缓冲区后未提取字符串流
- 比使用 s.str().c_str() 更好的表达?
- 除以 str.length() 什么也没显示
- SDL_ttf清除我之前和将来的所有渲染
- OSTRINGSTREAM,.STR(),并重置/清除流