为什么 stringstreams rdbuf() 和 str() 给出不同的输出?
我有这段代码,
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
返回所有缓冲区内容的副本。
在做什么
std::cout << ss.rdbuf();
?请参阅说明,
它从缓冲区中逐个字符读取并将它们写入 ostream,直到发生 eof/写入失败/异常。
你已经读过 buff 的一个字了。 现在它读取其余部分。
Returns copy of all buffer content.
What doing
std::cout << ss.rdbuf();
?See description for
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.
引用关于 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