std::flush
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <ostream> で定義
|
||
template< class CharT, class Traits > std::basic_ostream<CharT, Traits>& flush( std::basic_ostream<CharT, Traits>& os ); |
||
os.flush() を呼んだかのように、出力シーケンス os をフラッシュします。
これは出力専用の入出力マニピュレータであり、 std::basic_ostream 型の任意の out に対して out << std::flush のような式で呼ぶことができます。
ノート
このマニピュレータは、例えば実行時間の長いプロセスの出力を表示したり、複数のスレッドの活動のログを記録したり、予期せずクラッシュすることがあるプログラムのログを記録したりするときに、出力の不完全な行を直ちに生成するために使用することができます。 std::cout の明示的なフラッシュは、呼び出したプロセスがいかなる画面入出力も行わない場合、 std::system の呼び出しの前にも必要です (よくある例は Windows 上の std::system("pause") です)。 その他のほとんどの通常の対話型の入出力のシナリオでは、 std::cin からのあらゆる入力、 std::cerr への出力、またはプログラムの終了により std::cout.flush() の呼び出しが強制的に行われるため、 std::cout を使用するときは std::endl は冗長です。
出力の完全な行をフラッシュする必要があるときは、 std::endl マニピュレータを使用することができます。
すべての出力操作をフラッシュする必要があるときは、 std::unitbuf マニピュレータを使用することができます。
引数
| os | - | 出力ストリームへの参照 |
戻り値
os (操作後のストリームへの参照)。
例
std::flush がなくても、出力は同じでしょうが、リアルタイムには現れないかもしれません。
Run this code
#include <iostream>
#include <chrono>
template<typename Diff>
void log_progress(Diff d)
{
std::cout << "..("
<< std::chrono::duration_cast<std::chrono::milliseconds>(d).count()
<< " ms).." << std::flush;
}
int main()
{
volatile int sink=0;
auto t1 = std::chrono::high_resolution_clock::now();
for(int j=0; j<5; ++j)
{
for(int n=0; n<10000; ++n)
for(int m=0; m<20000; ++m)
sink += m*n; // do some work
auto now = std::chrono::high_resolution_clock::now();
log_progress(now - t1);
}
std::cout << '\n';
}
出力例:
..(450 ms)....(901 ms)....(1350 ms)....(1800 ms)....(2250 ms)..
関連項目
| 各操作ごとに出力をフラッシュするかどうか制御します (関数) | |
'\n' を出力して出力ストリームをフラッシュします (関数テンプレート) | |
| ベースとなるストレージデバイスと同期します ( std::basic_ostream<CharT,Traits>のパブリックメンバ関数)
|