Ripristino un ostream, C ++
Domanda
Ho 2 ostreams diversi, uno dei quali cerr, utilizzando lo stesso streambuffer, ho alcune librerie in quel cerr avrebbe potuto in qualche modo modificato, (bandiere? Modificatori di formato?).
cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);
cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";
stampe:
This
is
a
test
This is a teststream test
Debug mystreambuffer
Ho notato che le chiamate Cerr mystreambuffer->sync()
ogni operazione <<
mentre teststream non chiama affatto.
Se ho ragione cerr
è solo un ostream standard, allora, perché vedo questa differenza di vampate di calore tempi? Come faccio a ripristinare di nuovo cerr alle normali operazioni di lavaggio?
EDIT:? che vedo voi ragazzi Commentando unitbuf ed essendo default in cerr, ma se fosse stato di default, non è vero scrivere passo dopo passo anche qui
#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
Soluzione
std::cerr.unsetf( std::ios_base::unitbuf );
prova. Quella bandiera è avanti per cerr
per impostazione predefinita.
Altri suggerimenti
ios :: bandiera unitbuf è la ragione di ciò che è impostato di default per cerr.
È necessario utilizzare il manipolatore nounitbuf al fine di risolvere il problema. Alcune librerie più grandi non possono avere, se è così allora usare unsetf.
Modifica: L'impostazione di default per unitbuf dipende dall'implementazione:)