Espacios de nombres
Variantes
Acciones

std::endl

De cppreference.com
< cpp‎ | io‎ | manip
 
 
 
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
endl
(C++20)  

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 <ostream>
template<class CharT, class Traits >
std::basic_ostream<CharT, Traits>& endl(std::basic_ostream<CharT, Traits>& os );

Inserta un carácter de nueva línea en la secuencia de salida os y la vacía como si se llamara a os.put(os.widen('\n')) seguido de os.flush().

Este es un manipulador E/S de solo salida, se puede llamar con una expresión como out << std::endl para cualquier out del tipo std::basic_ostream.

Contenido

[editar]Notas

Este manipulador se puede usar para producir una línea de salida inmediatamente, por ejemplo, al mostrar la salida de un proceso de larga duración, registrar la actividad de múltiples subprocesos 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. En la mayoría de los demás escenarios de E/S interactivos habituales, std::endl es redundante cuando se usa con std::cout porque cualquier entrada de std::cin, salida a std::cerr o terminación del programa fuerza una llamada a std::cout.flush(). El uso de std::endl en lugar de '\n', recomendado por algunas fuentes, puede degradar significativamente el rendimiento de salida.

En muchas implementaciones, la salida estándar se almacena en búfer por línea y escribir '\n' provoca un vaciado de todos modos, a menos que se haya ejecutado std::ios::sync_with_stdio(false). En esas situaciones, el uso innecesario de endl solo degrada el rendimiento de la salida del archivo, no de la salida estándar.

Los ejemplos de código en esta wiki siguen a Bjarne Stroustrup y Guías Principales de C++ al vaciar la salida estándar solo cuando sea necesario.

Cuando se necesita vaciar una línea de salida incompleta, se puede utilizar el manipulador std::flush.

Cuando se necesita vaciar cada carácter de la 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

Con '\n' en lugar de endl, 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<<"Pasaron "<<std::chrono::duration_cast<std::chrono::milliseconds>(d)<< std::endl;   }   int main(){std::cout.sync_with_stdio(false);// en algunas plataformas, stdout se vacía con \n   staticvolatileint sink{};constauto t1 =std::chrono::high_resolution_clock::now();for(int i =0; i <5;++i){for(int j =0; j <10000;++j)for(int k =0; k <20000;++k) sink += i * j * k;// hacer algo de trabajo log_progress(std::chrono::high_resolution_clock::now()- t1);}}

Posible salida:

Pasaron 566ms Pasaron 1133ms Pasaron 1699ms Pasaron 2262ms Pasaron 2829ms

[editar]Véase también

Controla si la salida se vacía después de cada operación.
(función)[editar]
Vacía el flujo de salida.
(plantilla de función)[editar]

(función miembro pública de std::basic_ostream<CharT,Traits>)[editar]
close