http://www.cplusplus.com/reference/iostream/ostream/flush/からの定義によると、関数が存在する理由と、それをどのような目的で使用するかは明確ではありません。ストリームに書き込むたびに、flush()を呼び出してみませんか?
2 に答える
おそらく、その言葉flush
はあなたが実際にフラッシュするものから正確に来ています。トイレ...
それでは、トイレの例えを試してみましょう。
新しいものがボウルに落ちるたびに洗い流すことは非常に時間がかかり、水の完全な浪費です。これは、誰もが環境にやさしいことを目指している今日の大きな問題です。
では、代わりに何をしますか?すべてを保存し、最後に1回フラッシュすることで、バッファリングします。何らかの理由で、完了していないときはいつでも途中のどこかで「時期尚早に」フラッシュすることができます。
C ++ストリーム(とりわけ)はほとんど同じように機能します。オーバーヘッドを減らしてパフォーマンスを向上させるために、ストリームはその内容をバッファリングし、定期的にのみ「フラッシング」します。これの欠点は、次の質問のように「遅延」動作が発生する可能性があることです。改行がフォーマット文字列に含まれていない限り、printfが呼び出し後にフラッシュされないのはなぜですか。
それflush()
が目的です。バッファリングを上書きできるようにします。
一度に1文字ずつハードドライブにファイルを書き込むのは非効率的です。各文字のネットワークを介してパケットを送信することは非効率的です。したがって、ストリーミングはしばしばキャッシュされます。flush()
これは、キャッシュをフラッシュする必要があり、実際に送信または書き込みする必要があるストリーミング中に「手動で」制御する方法にすぎません。