Почему строковые потоки rdbuf() и str() выдают разные результаты?

StackOverflow https://stackoverflow.com/questions/727737

Вопрос

У меня есть этот код,

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():эй, копай

Но почему?Это из-за ostreams определение оператора <str() дает мне другой результат.На мой взгляд, результат должен быть таким же, даже если я использовал getline.

Это было полезно?

Решение

ss.rdbuf()->str();

Возвращает копию всего содержимого буфера.

Что делаешь std::cout << ss.rdbuf();?

См. описание для

basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);

Он считывает посимвольно из буфера и записывает их в ostream до тех пор, пока не произойдет eof/сбой при записи/исключении.

Вы уже прочитали одно слово из баффа.Теперь он читает остальную часть.

Другие советы

Цитата из Библии о потоковом вводе-выводе C++: Лангер и Крефт, вызывая str() в буфере потока (т.е.вещь, возвращаемая rdbuf()), «ведёт себя крайне нелогично» (стр. 72 в моём издании).Чтобы узнать всю историю, вам придется прочитать книгу.

Если вы не получили здесь удовлетворительного ответа, попробуйте группу usenet:

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top