名稱空間
變體
操作

std::flush

來自 cppreference.com
< cpp‎ | io‎ | manip
 
 
 
輸入/輸出操縱器
浮點格式化
整數格式化
布林格式化
欄位寬度和填充控制
其他格式化
空白字元處理
輸出重新整理
flush
(C++20)  

狀態標誌操作
時間與金錢 I/O
(C++11)
(C++11)
(C++11)
(C++11)
帶引號的操縱器
(C++14)
 
定義於標頭檔案 <ostream>
template< class CharT, class Traits >
std::basic_ostream<CharT, Traits>& flush( std::basic_ostream<CharT, Traits>& os );

重新整理輸出序列 os,如同呼叫 os.flush()

這是一個僅用於輸出的 I/O 運算子,它可以與表示式一起呼叫,例如對於 std::basic_ostream 型別的任何 out,可以使用 out << std::flush

目錄

[編輯] 注意

此運算子可用於立即產生不完整的輸出行,例如在顯示長時間執行程序的輸出、記錄多個執行緒的活動或記錄可能意外崩潰的程式的活動時。在呼叫 std::system 之前,如果生成的程序執行任何螢幕 I/O(一個常見的例子是 Windows 上的 std::system("pause")),則還需要顯式重新整理 std::cout。在大多數其他常見的互動式 I/O 場景中,當與 std::cout 一起使用時,std::endl 是多餘的,因為來自 std::cin 的任何輸入、輸出到 std::cerr 或程式終止都會強制呼叫 std::cout.flush()

當需要重新整理完整的輸出行時,可以使用 std::endl 運算子。

當每個輸出操作都需要重新整理時,可以使用 std::unitbuf 運算子。

[編輯] 引數

os - 輸出流的引用

[編輯] 返回值

os(操作後的流的引用)。

[編輯] 示例

沒有 std::flush,輸出將是相同的,但可能不會即時顯示。

#include <chrono>
#include <iostream>
 
template<typename Diff>
void log_progress(Diff d)
{
    std::cout << std::chrono::duration_cast<std::chrono::milliseconds>(d) << " ... "
              << 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';
}

可能的輸出

567ms ... 1137ms ... 1707ms ... 2269ms ... 2842ms ...

[編輯] 另請參閱

控制每次操作後是否重新整理輸出
(函式) [編輯]
輸出 '\n' 並重新整理輸出流
(函式模板) [編輯]
與底層儲存裝置同步
(std::basic_ostream<CharT,Traits> 的公共成員函式) [編輯]