Restablecimiento de un ostream, C ++
Pregunta
Tengo 2 ostreams diferentes, uno de ellos cerr, utilizando el mismo streambuffer, tengo algunas bibliotecas en las que cerr podría haber modificado de alguna manera, (banderas? Modificadores de formato?).
cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);
cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";
impresiones:
This
is
a
test
This is a teststream test
Depuración mystreambuffer
me he dado cuenta de que las llamadas cerr mystreambuffer->sync()
cada operación <<
mientras teststream no lo llama en absoluto.
Si soy cerr
correcta es sólo una ostream estándar, entonces, porque he visto que esta diferencia en los tiempos de lavado? ¿Cómo puedo restablecer la espalda cerr a operaciones de lavado normales?
EDIT:? veo que ustedes están comentando sobre unitbuf y siendo por defecto en cerr, pero si era por defecto, ¿no escribir paso a paso aquí, así
#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
Solución
std::cerr.unsetf( std::ios_base::unitbuf );
intento. Esa bandera está activada para cerr
por defecto.
Otros consejos
ios :: bandera unitbuf es la razón por la que se establece por defecto para cerr.
Se necesita usar el manipulador nounitbuf con el fin de solucionarlo. Algunas bibliotecas mayores pueden no tenerlo, si es así, utilizar unsetf.
Editar: configuración predeterminada para unitbuf es dependiente de la implementación:)