質問

私には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のデフォルト設定は実装依存です:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top