Ostream、C ++のリセット
質問
私には2つの異なるオストリーがあり、そのうちの1つは同じStreambufferを使用して、何らかの形でCERRを変更したかもしれないライブラリをいくつか持っています(フラグ?フォーマット修飾子?)。
cerr.rdbuf(&mystreambuffer);
ostream teststream(&mystreambuffer);
cerr << "This " << " is " << " a " << " test";
teststream << "This " << " is " << " a teststream " << " test";
印刷:
This
is
a
test
This is a teststream test
デバッグ mystreambuffer
Cerrが電話をかけることに気づきました mystreambuffer->sync()
毎日 <<
TestStreamがまったく呼び出されている間、操作。
私が正しい場合 cerr
それでは、標準的なオストリーです。なぜ、なぜフラッシング時間にこの違いが見られるのですか? CERRを通常のフラッシング操作に戻すにはどうすればよいですか?
編集: 皆さんがUnitBufについてコメントしており、それがCERRでデフォルトであることを見ていますが、デフォルトであれば、ここでも段階的に書いていませんか?
#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
解決
試す std::cerr.unsetf( std::ios_base::unitbuf );
. 。そのフラグはオンになっています cerr
デフォルトで。
他のヒント
iOS :: UnitBufフラグは、CERRのデフォルトに設定されている理由です。
それを修正するには、Nounitbufマニピュレーターを使用する必要があります。いくつかの古いライブラリにはそれがない場合があります。もしそうなら、unsetfを使用してください。
編集:UnitBufのデフォルト設定は実装依存です:)
所属していません StackOverflow