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
È stato utile?

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:)

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