std::unitbuf, std::nounitbuf
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.
unitbuf
en el flujo str como si se llamara a str.setf(std::ios_base::unitbuf).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) | |
Emite '\n' y vacía el flujo de salida. (plantilla de función) |