名前空間
変種
操作

std::unitbuf, std::nounitbuf

提供: cppreference.com
< cpp‎ | io‎ | manip
 
 
 
入出力マニピュレータ
浮動小数点フォーマット
整数フォーマット
ブーリアンフォーマット
フィールド幅とフィル制御
その他のフォーマット
ホワイトスペース処理
出力のフラッシュ
unitbufnounitbuf
ステータスフラグ操作
時間と通貨の入出力
(C++11)
(C++11)
(C++11)
(C++11)
引用符マニピュレータ
(C++14)
 
ヘッダ <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) を呼んだかのように、ストリーム strunitbuf フラグを有効化します。

2) str.unsetf(std::ios_base::unitbuf) を呼んだかのように、ストリーム strunitbuf フラグを無効化します。

これは入出力マニピュレータであり、 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::wcerrunitbuf ビットがデフォルトでセットされています。

[編集] 引数

str - 入出力操作への参照

[編集] 戻り値

str (操作後のストリームへの参照)。

[編集]

std::unitbuf や明示的なフラッシュがなくても、出力は同じですが、リアルタイムには現れません。

#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)..

[編集] 関連項目

出力ストリームをフラッシュします
(関数テンプレート) [edit]
'\n' を出力して出力ストリームをフラッシュします
(関数テンプレート) [edit]