C++/sstream
< C++
sstream头文件主要定义了基于std::string类的流输入输出。
注意,strstream头文件及其定义的std::strstream被C++11宣布为过时,被C++17正式废除(不再支持)。std::strstream使用一个字符数组初始化时,就以该数组为工作区。相反,std::stringstream使用一个字符数组初始化时,会申请分配自己的工作区(std::string)并把初始化数组“深拷贝”到工作区。废除std::strstream的理由:
- . std::strstream返回一个很难管理的 char *,因为没有说明它是如何分配的。因此,不可能知道是否应该释放它所占的内存或对其调用 free() 或对它做任何其他事情。释放它的唯一真正令人满意的方法是通过 freeze() 函数将其交还给 strstream。 这一点不够明显,以至于很多人都弄错了。 std::stringstream 返回一个自我管理的字符串对象,这更不容易出错。
- 必须使用std::ends来终止字符串。
类模板
编辑- basic_stringbuf: 继承自basic_streambuf
- str : 获取、设置字符串缓冲区的内容。获取时返回的是一个临时对象。
- operator =(移动语义) : 移动语义的赋值运算符。
- swap : 交换两个对象内容。
- rdbuf : 返回内部的basic_stringbuf对象指针。
- basic_istringstream
- basic_ostringstream
- 构造函数:如果带一个std::string参数,则使用参数的内容作为被构造的对象的初始内容。
- basic_stringstream
类型
编辑- istringstream
- ostringstream
- stringstream
- stringbuf
- wistringstream
- wostringstream
- wstringstream
- wstringbuf
函数
编辑类型定义
编辑- typedef basic_istringstream< char > istringstream;
- typedef basic_ostringstream< char > ostringstream;
- typedef basic_stringstream< char > stringstream;
- typedef basic_stringbuf< char > stringbuf;
- typedef basic_istringstream< wchar_t > wistringstream;
- typedef basic_ostringstream< wchar_t > wostringstream;
- typedef basic_stringstream< wchar_t > wstringstream;
- typedef basic_stringbuf< wchar_t > wstringbuf;
实践
编辑重复使用同一个ostringstream对象时,建议:
- 调用clear()清除当前错误控制状态,其原型为 void clear (iostate state=goodbit); 标志位一共有4种, goodbit, eofbit, failbit, badbit, clear()可以清除掉所有的error state
- 调用str("")将缓冲区清零,清除脏数据