std::flush
Definido en el archivo de 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 E/S de solo salida, que puede llamarse con una expresión como out << std::flush para cualquier out
del tipo std::basic_ostream.
Contenido |
[editar]Notas
Este manipulador puede usarse 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 varios hilos o registrar la actividad de un programa que puede fallar inesperadamente. También es necesario un vaciado explícito de std::cout antes de una llamada a std::system, si el proceso generado realiza cualquier E/S de pantalla (un ejemplo común es std::system("pause") en Windows). En la mayoría de los demás escenarios de E/S interactivos habituales, std::endl es redundante cuando se utiliza con std::cout porque cualquier entrada de std::cin, salida a std::cerr o finalización del programa fuerza una llamada a std::cout.flush().
Cuando se necesita vaciar una línea completa de salida, se puede utilizar el manipulador std::endl.
Cuando se necesita vaciar cada operación de salida, se puede utilizar el manipulador std::unitbuf.
[editar]Parámetros
os | - | Referencia al flujo de salida. |
[editar]Valor de retorno
os (Referencia al flujo después de la manipulación).
[editar]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(){volatileint 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;// hacer algo de trabajoauto now =std::chrono::high_resolution_clock::now(); log_progress(now - t1);}std::cout<<'\n';}
Posible salida:
567ms ... 1137ms ... 1707ms ... 2269ms ... 2842ms ...
[editar]Véase también
Controla si la salida se vacía después de cada operación. (función) | |
Emite '\n' y vacía el flujo de salida. (plantilla de función) | |
(función miembro pública de std::basic_ostream<CharT,Traits> ) |