std:: flush
|
定义于头文件
<ostream>
|
||
|
template
<
class
CharT,
class
Traits
>
std:: basic_ostream < CharT, Traits > & flush ( std:: basic_ostream < CharT, Traits > & os ) ; |
||
刷新输出序列 os ,如同通过调用 os. flush ( ) 实现。
这是一个仅输出的I/O操纵器,可通过诸如
out
<<
std
::
flush
之类的表达式调用,适用于任何
out
类型为
std::basic_ostream
的对象。
目录 |
注释
此操纵符可用于立即生成不完整的输出行,例如在显示长时间运行进程的输出、记录多线程活动或记录可能意外崩溃的程序活动时。如果在调用的进程执行任何屏幕I/O操作前(常见例子是在Windows系统上执行 std:: system ( "pause" ) ),必须显式刷新 std::cout 。在大多数其他常见的交互式I/O场景中,将 std::endl 与 std::cout 结合使用时是冗余的,因为来自 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>
的公开成员函数)
|