为什么 stringstreams rdbuf() 和 str() 给出不同的输出?

发布于 2024-07-16 08:23:36 字数 498 浏览 12 评论 0原文

我有这段代码,

int main()
{
    std::string st;
    std::stringstream ss;
    ss<<"hej hej med dig"<<std::endl;

    std::getline(ss,st,' ');
    std::cout <<"ss.rdbuf()->str() : " << ss.rdbuf()->str();
    std::cout <<"ss.rdbuf() : " << ss.rdbuf();
    return 0;
}

给我这个输出

ss.rdbuf()->str() : hej hej med dig

ss.rdbuf() : hej med dig

但这是为什么呢? 是因为operator

I have this code,

int main()
{
    std::string st;
    std::stringstream ss;
    ss<<"hej hej med dig"<<std::endl;

    std::getline(ss,st,' ');
    std::cout <<"ss.rdbuf()->str() : " << ss.rdbuf()->str();
    std::cout <<"ss.rdbuf() : " << ss.rdbuf();
    return 0;
}

Giving me this output

ss.rdbuf()->str() : hej hej med dig

ss.rdbuf() : hej med dig

But why is that? Is that because of ostreams definition of operator<str() gives me different output. In my eyes the output should be the same even if I have used getline.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一萌ing 2024-07-23 08:23:36
ss.rdbuf()->str();

返回所有缓冲区内容的副本。

在做什么std::cout << ss.rdbuf();

请参阅说明,

basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);

它从缓冲区中逐个字符读取并将它们写入 ostream,直到发生 eof/写入失败/异常。

你已经读过 buff 的一个字了。 现在它读取其余部分。

ss.rdbuf()->str();

Returns copy of all buffer content.

What doing std::cout << ss.rdbuf();?

See description for

basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);

It read character by character from buffer and write them to ostream, until eof/fail on writing/exception occurs.

You already have read one word from buff. Now it read rest part.

败给现实 2024-07-23 08:23:36

引用关于 C++ 流 I/O 的圣经,Langer 和 Kreft,调用 str()在流缓冲区上(即 rdbuf() 返回的内容)“以极其违反直觉的方式表现”(我的版本中的第 72 页)。 要了解完整的故事,您必须阅读这本书。

如果您在这里没有得到满意的答案,请尝试使用 usenet 群组:

http://groups.google.com/group/comp.lang。 c++.moderated

To quote from the bible on C++ stream I/O, Langer and Kreft, calling str() on a stream buffer (i.e. the thing returned by rdbuf()) "behaves in an extremely counterintuitive way" (page 72 in my edition). For the full story, you will have to read the book.

If you don't get a satisfactory answer here, try the usenet group:

http://groups.google.com/group/comp.lang.c++.moderated

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文