Spec-Zone.ru › C++

std::flush

Определено в заголовочном файле <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 ...

См. также

unitbufnounitbuf
управляет тем, очищается ли вывод после каждой операции
(функция)
endl
выводит '\n' и очищает выходной поток
(функция-шаблон)
flush
синхронизируется с подлежащим устройством хранения
(публичный член-функция std::basic_ostream<CharT,Traits>)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/manip/flush

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API