Namespaces
Variants

std:: flush

From cppreference.net
< cpp ‎ | io ‎ | manip
Definido en el encabezado <ostream>
template < class CharT, class Traits >
std:: basic_ostream < CharT, Traits > & flush ( std:: basic_ostream < CharT, Traits > & os ) ;

Vacía la secuencia de salida os como si se llamara a os. flush ( ) .

Este es un manipulador de E/S de solo salida, puede ser llamado con una expresión como out << std :: flush para cualquier out de tipo std::basic_ostream .

Contenidos

Notas

Este manipulador puede utilizarse para producir una línea de salida incompleta inmediatamente, por ejemplo, al mostrar la salida de un proceso de larga duración, registrar la actividad de múltiples hilos o registrar la actividad de un programa que puede fallar inesperadamente. Un vaciado explícito de std::cout también es necesario antes de una llamada a std::system , si el proceso generado realiza cualquier operación de E/S de pantalla (un ejemplo común es std:: system ( "pause" ) en Windows). En la mayoría de los otros escenarios interactivos de E/S habituales, std::endl es redundante cuando se usa con std::cout porque cualquier entrada desde std::cin , salida a std::cerr , o terminación del programa fuerza una llamada a std:: cout . flush ( ) .

Cuando una línea completa de salida necesita ser vaciada, puede utilizarse el std::endl manipulador.

Cuando cada operación de salida necesita ser liberada del búfer, se puede utilizar el manipulador std::unitbuf .

Parámetros

os - referencia al flujo de salida

Valor de retorno

os (referencia al flujo después de la manipulación).

Ejemplo

Sin std::flush , la salida sería la misma, pero podría no aparecer en tiempo real.

#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';
}

Salida posible:

567ms ... 1137ms ... 1707ms ... 2269ms ... 2842ms ...

Véase también

controla si la salida se vacía después de cada operación
(función)
envía ' \n ' y vacía el flujo de salida
(plantilla de función)
sincroniza con el dispositivo de almacenamiento subyacente
(función miembro pública de std::basic_ostream<CharT,Traits> )