Pergunta

Eu tenho 2 ostreams diferentes, um deles, usando o mesmo streambuffer, tenho algumas bibliotecas que podem ter modificado Cerr de alguma forma (sinalizadores? Modificadores de formato?).

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

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

impressões:

This
is
a
test
This is a teststream test

Depuração mystreambuffer Eu notei que Cerr liga mystreambuffer->sync() todo << Operação enquanto o TestStream não o chama de nada.
Se eu estiver correto cerr É apenas um ostream padrão, então, por que vejo essa diferença nos tempos de descarga? Como posso redefinir o Cerr de volta às operações normais de descarga?

EDITAR: Vejo que vocês estão comentando sobre a Unitbuf e está sendo padrão no Cerr, mas se fosse padrão, não escreveria passo a passo aqui também?

#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
Foi útil?

Solução

Tentar std::cerr.unsetf( std::ios_base::unitbuf );. Essa bandeira está ligada a cerr por padrão.

Outras dicas

O sinalizador iOS :: Unitbuf é o motivo do que está definido como padrão para o CERR.

Você precisa usar o manipulador NounitBuf para corrigi -lo. Algumas bibliotecas mais antigas podem não ter, se assim for, use Unsetf.

EDIT: Configuração padrão para UnitBuf depende da implementação :)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top