Question

J'ai 2 différents ostreams, l'un d'entre eux cerr, en utilisant la même streambuffer, j'ai quelques bibliothèques qui auraient pu modifier cerr en quelque sorte, (drapeaux? Modificateurs de format?).

cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);

cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";

impressions:

This
is
a
test
This is a teststream test

Debugging mystreambuffer J'ai remarqué que les appels cerr mystreambuffer->sync() toutes les opérations de << alors que teststream ne remet pas du tout.
Si je suis cerr correcte est juste un ostream standard, alors, pourquoi dois-je voir cette différence dans les temps de rinçage? Comment puis-je réinitialiser en arrière cerr aux opérations de rinçage normales?

EDIT: Je vois que vous les gars commentons sur les unitbuf et étant par défaut dans cerr, mais si elle était par défaut, ne serait-il pas à pas écrire ici aussi

#include <iostream>
int main(){
    std::cerr << "This " << " is " << " a cerr " << " test\n";
    std::cout << "This " << " is " << " a cout " << " test\n";
}
Cobain /tmp$ ./test 
This  is  a cerr  test
This  is  a cout  test
Était-ce utile?

La solution

Essayez std::cerr.unsetf( std::ios_base::unitbuf );. Ce drapeau est activé pour cerr par défaut.

Autres conseils

ios :: drapeau unitbuf est la raison de ce qui est réglé par défaut pour cerr.

Vous devez utiliser le manipulateur nounitbuf afin de le corriger. Certaines bibliothèques anciens peuvent ne pas avoir, le cas échéant puis utilisez unsetf.

Edit: Le réglage par défaut pour unitbuf dépend de la mise en œuvre:)

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