首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同的字符串流和字符串流

不同的字符串流和字符串流
EN

Stack Overflow用户
提问于 2013-08-15 19:01:32
回答 2查看 21.4K关注 0票数 15

我正在尝试下面的代码片段,但它没有给出所需的输出:

代码语言:javascript
复制
#include<iostream>
#include<sstream>
using namespace std;
void MyPrint(ostream& stream)
{
    cout<<stream.rdbuf()<< endl;
}
int main()
{
    stringstream ss;
    ss<<"hello there";
    MyPrint(ss);                //Prints fine

    ostringstream oss;
    oss<<"hello there";
    MyPrint(oss);               //Does not print anything
    getchar();
}

我知道stringstreamostringstream之间唯一可能的区别是后者迫使方向,并且比stringstream快一点。

我错过了什么吗?

PS:早些时候也有类似的问题,但没有得到任何答案。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-15 19:06:04

std::stringstreamstd::ostringstreamstd::stringbuf传递不同的标志。特别是,std::ostringstreamstd::stringbuf不支持读取。std::cout << stream.rdbuf()是streambuf上的读操作。

std::ostringstream中提取字符的方法是使用std::ostringstream::str()函数。

票数 23
EN

Stack Overflow用户

发布于 2013-08-15 19:10:38

stringstream不应该被认为是ostringstream和stringstream的双向实现。它是作为一个派生的类实现的,这就是为什么它同时实现了输入和输出功能。

选择使用哪一个取决于它的用途。如果您只需要在流上写入数据,而不能通过流访问数据,那么您所需要的就是ostringstream。然而,如果你想在你提供给API的东西上实现双向,但是限制它,你可以强制转换它:

代码语言:javascript
复制
stringstream ss;  // My bidirectional stream

ostringstream *p_os = &ss;  // Now an output stream to be passed to something only allowed to write to it.

int bytes = collectSomeData(p_oss);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18251346

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档