kmc*_*coy 10 c++ ostringstream ostream
ostream和ostringstream有什么区别?你什么时候使用一个?
Jam*_*nze 18
简洁明了:ostringstream提供一个streambuf,ostream
要求用户提供一个.
为了理解其含义,有必要了解一些流如何工作(与其他一些海报不同,我不确定在网上有这么好的探索).基本抽象ostream是格式化文本输出.你给它一个int或一个
double(或用户定义的类型 - 稍后更多),并将其转换为类型的字符流char.它对流的作用取决于streambuf附加到它的流; 这是策略模式的一个例子,其中streambuf是策略的抽象基类[1].该标准提供的两个实现streambuf,filebuf和stringbuf; 在实践中,除了最琐碎的应用之外,你可能会有一些你自己实现的.
输出时,你总是使用ostream; 它<<是定义运算符的类
.您正在将数据格式化为字符流,并且您并不关心流最终的位置.
创建实例时:如果创建实例ostream,则必须streambuf自己提供实例.更常见的是,你会创造一个
ofstream或一个ostringstream.这些都是"便利"类,它们来自ostream并提供streambuf它(filebuf
并且stringbuf,当它发生时).实事求是地讲,所有他们能做的就是提供必要的streambuf(影响构造函数和析构函数,而其他不是非常多); 在这种情况下ofstream,还有一些额外的功能可以转发到filebuf界面中的附加功能.
通常(但绝不是必需的)当您定义自己
streambuf以提供方便的重载ostream(和
istream,如果相关)时,沿着与ofstream或
相同的行ostringstream.
出于同样的原因,在创建实例时,通常使用"方便"派生类之一,而不是ostream直接使用并提供自己的streambuf.
如果所有这些看起来都很复杂:iostream类几乎使用了C++的所有功能(虚函数,模板和函数重载都起着重要的作用).如果您只是在学习C++,请不要过于担心它:只需使用ofstream或
ostringstream构建实例,但传递引用ostream.当您了解虚拟函数,模板和运算符重载等技术时,请返回iostream以了解它们在使代码更灵活方面所起的作用.
[1]由于各种原因,std::streambuf实际上并不是抽象的.但是虚拟功能的实现是无用的; 提取始终返回EOF,并且插入始终失败.
Mim*_*EAM 10
这里是C++流类的继承层次结构的很好的视图:)
本节的这篇文章
3.1 ofstream and ostringstream有你需要的.
本质上:ofstream该类使得它成为可能,write data to files using stream operations并且ostringstream该类使其成为可能write to strings.

| 归档时间: |
|
| 查看次数: |
13309 次 |
| 最近记录: |