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

msl*_*lot 5 c++ std stringstream getline sstream

我有这个代码,

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;
}
Run Code Online (Sandbox Code Playgroud)

给我这个输出

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

ss.rdbuf():hej med dig

但那是为什么呢?是因为运算符<str()的ostreams定义给了我不同的输出.在我看来,即使我使用了getline,输出应该是相同的.

bay*_*yda 7

ss.rdbuf()->str();
Run Code Online (Sandbox Code Playgroud)

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

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

参见说明

basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);
Run Code Online (Sandbox Code Playgroud)

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

你已经读过buff中的一个单词.现在它读了休息部分.