Namespaces
Variants

std:: unitbuf, std:: nounitbuf

From es.cppreference.net
< cpp ‎ | io ‎ | manip
Input/output manipulators
Floating-point formatting
Integer formatting
Boolean formatting
Field width and fill control
Other formatting
Whitespace processing
Output flushing
unitbuf nounitbuf
Status flags manipulation
Time and money I/O
(C++11)
(C++11)
(C++11)
(C++11)
Quoted manipulator
(C++14)
Definido en el encabezado <ios>
(1)
std:: ios_base & nounitbuf ( std:: ios_base & str ) ;
(2)

Habilita o deshabilita el vaciado automático del flujo de salida después de cualquier operación de salida. No tiene efecto en la entrada.

1) Habilita el indicador unitbuf en el flujo str como si se llamara a str. setf ( std:: ios_base :: unitbuf ) .
2) Desactiva el indicador unitbuf en el flujo str como si se llamara a str. unsetf ( std:: ios_base :: unitbuf ) .

Este es un manipulador de E/S, puede ser llamado con una expresión como out << std :: unitbuf para cualquier out de tipo std::basic_ostream o con una expresión como in >> std :: unitbuf para cualquier in de tipo std::basic_istream .

Contenidos

Notas

El vaciado se realiza en el destructor del objeto std::basic_ostream::sentry , que llama a str. rdbuf ( ) - > pubsync ( ) si str. flags ( ) & std:: ios_base :: unitbuf es true .

Los objetos de salida estándar std::cerr y std::wcerr tienen su bit unitbuf establecido por defecto.

Parámetros

str - referencia al flujo de E/S

Valor de retorno

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

Ejemplo

Sin std::unitbuf u otro flush explícito, la salida es la misma, pero no aparece 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)
              << " ... ";
}
int main()
{
    volatile int sink = 0;
    std::cout << std::unitbuf; // enable automatic flushing
    const auto start = 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
        log_progress(std::chrono::high_resolution_clock::now() - start);
    }
    std::cout << '\n';
}

Salida:

571ms ... 1146ms ... 1722ms ... 2294ms ... 2865ms ...

Véase también

vacía el búfer del flujo de salida
(plantilla de función)
envía ' \n ' y vacía el búfer del flujo de salida
(plantilla de función)