为什么 stringstreams rdbuf() 和 str() 给出不同的输出?
-
05-09-2019 - |
题
我有这个代码,
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() :嘿嘿医学挖掘
ss.rdbuf() :医学挖掘
但这是为什么呢?是因为operator<str() 的ostreams 定义给了我不同的输出吗?在我看来,即使我使用了 getline,输出也应该是相同的。
解决方案
ss.rdbuf()->str();
返回所有缓冲区内容的副本。
做什么 std::cout << ss.rdbuf();
?
请参阅说明
basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);
它从缓冲区中逐个字符读取并将它们写入 ostream,直到发生 eof/写入失败/异常。
你已经读过 buff 的一个字了。现在它读取其余部分。
其他提示
引用《C++ 流 I/O 圣经》中的内容: 兰格和克雷夫特, ,在流缓冲区上调用 str() (即rdbuf()) 返回的东西“以一种极其违反直觉的方式表现”(我的版本中的第 72 页)。要了解完整的故事,您必须阅读这本书。
如果您在这里没有得到满意的答案,请尝试使用 usenet 组:
不隶属于 StackOverflow