Frage

Ich habe 2 verschiedene ostreams, einer von ihnen cerr, den gleichen streambuffer verwenden, ich habe einige Bibliotheken in dieser vielleicht geändert cerr hat irgendwie (Flags? Format Modifikatoren?).

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

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

druckt:

This
is
a
test
This is a teststream test

Debuggen mystreambuffer Ich habe bemerkt, dass cerr Anrufe jeden mystreambuffer->sync() Betrieb << während teststream es überhaupt nicht nennen.
Wenn ich richtig cerr bin nur ein Standard Ostream ist, dann, warum sehe ich diesen Unterschied mal in Spülung? Wie kann ich cerr wieder normal Spülvorgänge zurücksetzen?

EDIT:? Ich sehe ihr über unitbuf kommentieren und es wird standardmäßig in cerr, aber wenn es Standard ist, wäre es nicht Schritt für Schritt schreibt auch hier

#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
War es hilfreich?

Lösung

Versuchen std::cerr.unsetf( std::ios_base::unitbuf );. Diese Flagge ist auf für cerr standardmäßig aktiviert.

Andere Tipps

ios :: unitbuf Fahne ist der Grund für das, was für cerr auf Standard eingestellt ist.

Sie müssen den nounitbuf Manipulator, um verwenden, um es zu beheben. Einige ältere Bibliotheken kann es nicht haben, wenn ja, dann verwenden unsetf.

Edit: Standardeinstellung für unitbuf ist abhängig von der Implementierung:)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top