Perché stringstreams rdbuf() e str() mi danno un output diverso?
-
05-09-2019 - |
Domanda
Ho questo codice,
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;
}
Dammi questo output
ss.rdbuf()->str() :hej hej con dig
ss.rdbuf() :hej med dig
Ma perché?È perché la definizione di ostream di operator<str() mi dà un output diverso.Ai miei occhi l'output dovrebbe essere lo stesso anche se ho usato getline.
Soluzione
ss.rdbuf()->str();
Restituisce una copia di tutto il contenuto del buffer.
Cosa stai facendo std::cout << ss.rdbuf();
?
Vedi la descrizione per
basic_ostream<charT,traits>& operator<<(basic_streambuf<charT,traits>* sb);
Legge carattere per carattere dal buffer e li scrive su ostream, finché non si verifica un eof/fail on writing/exception.
Hai già letto una parola di buff.Ora legge la parte restante.
Altri suggerimenti
Per citare la Bibbia sull'I/O del flusso C++, Langer e Kreft, chiamando str() su un buffer di flusso (ad esempiola cosa restituita da rdbuf()) "si comporta in modo estremamente controintuitivo" (pagina 72 nella mia edizione).Per tutta la storia dovrete leggere il libro.
Se non ottieni una risposta soddisfacente qui, prova il gruppo Usenet: