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 ...
См. также
| управляет тем, сбрасывается ли вывод после каждой операции (функция) |
|
выводит '\n' и сбрасывает выходной поток (шаблон функции) |
|
| синхронизирует данные с базовым устройством хранения (открытая функция-член std::basic_ostream<CharT,Traits>) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/manip/flush