Namespaces
Variants

std:: flush

From cppreference.net
< cpp ‎ | io ‎ | manip
定义于头文件 <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> 的公开成员函数)