Pergunta

Eu tenho esse código,

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;
}

me dar esta saída

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

ss.rdbuf (): hej med dig

Mas por que isso? É que por causa da ostreams definição de operador

Foi útil?

Solução

ss.rdbuf()->str();

Retorna cópia de todo o conteúdo do buffer.

O que fazer std::cout << ss.rdbuf();?

Veja a descrição para

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

É ler caractere por caractere de buffer e gravá-los para ostream, até eof / falha na escrita / exceção ocorre.

Você já leu uma palavra de buff. Agora ler a parte restante.

Outras dicas

Para citar a Bíblia em C ++ fluxo de I / O, Langer e Kreft , chamando str () em um buffer de fluxo (isto é, a coisa retornado por rdbuf ()) "se comporta de uma forma extremamente contraditório" (página 72 na minha edição). Para a história completa, você terá que ler o livro.

Se você não obtiver uma resposta satisfatória aqui, tente o grupo usenet:

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top