Espacios de nombres
Variantes
Acciones

std::unitbuf, std::nounitbuf

De cppreference.com
< cpp‎ | io‎ | manip
 
 
Biblioteca de E/S
Manipuladores de E/S
E/S estilo C
Búferes
(en desuso en C++98)
Flujos
Abstracciones
E/S de archivos
E/S de cadenas
E/S de arrays
(en desuso en C++98)
(en desuso en C++98)
(en desuso en C++98)
Salida sincronizada
Tipos
Interfaz de categoría de error
(C++11)
 
Manipuladores de E/S
Formateo de punto flotante
Formateo de enteros
Formateo de booleanos
Control de ancho de campo y relleno
Otro formateo
Procesamiento de espacio en blanco
Vaciado de salida
(C++20)  

unitbufnounitbuf
Manipulación de indicadores de estado
E/S de tiempo y dinero
(C++11)
(C++11)
(C++11)
(C++11)
Manipulación entre comillas
(C++14)
 
Definido en el archivo de encabezado <ios>
std::ios_base& unitbuf( std::ios_base& str );
(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) Deshabilita 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, que 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.

Contenido

[editar] 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.

[editar] Parámetros

str - Referencia al flujo de E/S.

[editar] Valor de retorno

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

[editar] Ejemplo

Sin std::unitbuf u otro vaciado 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; // habilitar vaciado automático
 
    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; // generar algo de trabajo
        log_progress(std::chrono::high_resolution_clock::now() - start);
    }
    std::cout << '\n';
}

Salida:

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

[editar] Véase también

Vacía el flujo de salida.
(plantilla de función) [editar]
Emite '\n' y vacía el flujo de salida.
(plantilla de función) [editar]