std::unitbuf, std::nounitbuf
提供: cppreference.com
ヘッダ <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' を出力して出力ストリームをフラッシュします (関数テンプレート) |