Question

J'ai ce code,

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 donnant cette sortie

  

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

     

ss.rdbuf (): Hej med dig

Mais pourquoi est-ce? Est-ce en raison de la définition de ostreams de l'opérateur

Était-ce utile?

La solution

ss.rdbuf()->str();

retourne ensuite la copie de tout le contenu de la mémoire tampon.

Qu'est-ce que faire std::cout << ss.rdbuf();?

Voir la description pour

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

Il a lu caractère par caractère de tampon et de les écrire à ostream, jusqu'à ce que EOF / échec de l'écriture / exception se produit.

Vous avez déjà lu un mot de buff. Maintenant, il reste lu une partie.

Autres conseils

Pour citer la Bible sur I flux de C / O, et Langer Kreft , appelant str () sur un tampon de flux (la chose retournée par rdbuf ()) « se comporte d'une manière extrêmement contre-intuitif » (page 72 dans mon édition). Pour l'histoire, vous devrez lire le livre.

Si vous ne recevez pas de réponse satisfaisante ici, essayez le groupe usenet:

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top