std::flush
來自 cppreference.com
定義於標頭檔案 <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> 的公共成員函式) |