std::unitbuf, std::nounitbuf
提供: cppreference.com
<tbody>
</tbody>
| ヘッダ <ios> で定義
|
||
std::ios_base& unitbuf( std::ios_base& str ); |
(1) | |
std::ios_base& nounitbuf( std::ios_base& str ); |
(2) | |
あらゆる出力操作後の出力ストリームの自動フラッシュを有効化または無効化します。 入力には効果がありません。
1) str.setf(std::ios_base::unitbuf) を呼んだかのように、ストリーム str の unitbuf フラグを有効化します。
2) str.unsetf(std::ios_base::unitbuf) を呼んだかのように、ストリーム str の unitbuf フラグを無効化します。
これは入出力マニピュレータであり、 std::basic_ostream 型の任意の out に対する out << std::unitbuf のような式や std::basic_istream 型の任意の in に対する in >> std::unitbuf のような式で呼ぶことができます。
ノート
フラッシュは std::basic_ostream::sentry オブジェクトのデストラクタで行われます。 str.flags() & std::ios_base::unitbuf が true であれば str.rdbuf()->pubsync() を呼びます。
標準出力オブジェクト std::cerr および std::wcerr は unitbuf ビットがデフォルトでセットされています。
引数
| str | - | 入出力操作への参照 |
戻り値
str (操作後のストリームへの参照)。
例
std::unitbuf や明示的なフラッシュがなくても、出力は同じですが、リアルタイムには現れません。
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)..";
}
int main()
{
volatile int sink = 0;
std::cout << std::unitbuf; // enable automatic flushing
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)....(902 ms)....(1352 ms)....(1802 ms)....(2252 ms)..
関連項目
| 出力ストリームをフラッシュします (関数テンプレート) | |
'\n' を出力して出力ストリームをフラッシュします (関数テンプレート) |