Pourquoi est-stringstreams rdbuf () et str () me donner un résultat différent?
-
05-09-2019 - |
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
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: