Por que é stringstreams rdbuf () e str () me dando saída diferente?
-
05-09-2019 - |
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
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: