我有这段代码,
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() - &gt; str():hej hej med dig
ss.rdbuf():hej med dig
但为什么呢?是因为运算符&lt; str()的ostreams定义给了我不同的输出。在我看来,即使我使用了getline,输出应该是相同的。
答案 0 :(得分:7)
ss.rdbuf()->str();
返回所有缓冲区内容的副本。
做什么std::cout << ss.rdbuf();
?
参见
的说明basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);
它从缓冲区逐个字符读取并将它们写入ostream,直到写入/异常发生eof / fail。
你已经从buff读过一个单词。现在它读了休息部分。
答案 1 :(得分:2)
引用C ++流I / O上的圣经Langer and Kreft,在流缓冲区上调用str()(即rdbuf()返回的东西)“以非常违反直觉的方式行事”(第72页)在我的版本中)。完整的故事,你将不得不阅读这本书。
如果您在这里没有得到满意的答案,请尝试使用usenet组: