我有这个代码,

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 组:

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top