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

Это манипулятор вывода только для записи, он может быть вызван выражением вида out << std :: flush для любого out типа std::basic_ostream .

Содержание

Примечания

Этот манипулятор может использоваться для немедленного вывода неполной строки, например, при отображении вывода длительного процесса, логировании активности нескольких потоков или логировании активности программы, которая может неожиданно завершиться с ошибкой. Явный сброс буфера std::cout также необходим перед вызовом std::system , если порожденный процесс выполняет любой ввод-вывод на экран (распространенный пример - std:: system ( "pause" ) в Windows). В большинстве других обычных сценариев интерактивного ввода-вывода 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> )