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(){volatileint sink =0;std::cout<< std::unitbuf;// habilitar vaciado automático constauto 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) |