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.

È stato utile?

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:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top