No tengo un contexto específico en el que estoy haciendo la pregunta, pero mientras leía un libro para principiantes en C ++ noté el uso de un manipulador de flujo endl y un carácter de escape de nueva línea cuando se trata de un objeto de flujo.
El ejemplo es el siguiente:
cout << "Hello World" << endl;
cout << "Hello World\n";
Mis preguntas son:
- ¿Es más apropiado usar el manipulador de flujo (endl) en una situación determinada y un personaje de escape en una diferente?
- ¿Existen inconvenientes en cuanto a eficiencia al usar uno de los dos?
- ¿Son completamente intercambiables?
- Leí que una secuencia de escape se almacena en la memoria como un solo personaje. ¿Eso significa que es más apropiado usar endl si vas a consumir poca memoria?
- ¿El manipulador de flujo utiliza memoria de alguna manera, si es así, es más que la secuencia de escape?
Gracias, StackExchange Disculpas si publiqué esto en la sección incorrecta, pensé que contaba como estructuras de datos.
c++
data-structures
Nathan Taylor
fuente
fuente

Respuestas:
o << std::endles equivalente al siguiente código:En otras palabras, solo debe usar
std::endlcuando necesita vaciar la transmisión. Por ejemplo:Si no necesita vaciar el flujo, use en
\nlugar destd::endl. Las llamadas adicionales aflushpueden afectar el rendimiento (a veces significativamente).Para más detalles, visite cppreference.com .
Con respecto al uso de la memoria: Preocuparse por el
\nversusstd::endles casi seguro una microoptimización innecesaria, pero en general, esperaría\ntener menos memoria.\nes solo un byte más al final de un literal de cadena, mientras que la escriturastd::endles traducida por el compilador a (probablemente en línea) llamadas a funciones aputyflush.Las diferencias específicas de plataforma en los finales de línea (Windows
\r\nversus Linux y OS X\n) se manejan en un nivel más bajo questd::endly\n:\n, la traduce automáticamente al final de línea apropiado para la plataforma específica. Si lee un final de línea específico de la plataforma, la transmisión se traduce automáticamente a\n.std::coutystd::cinen particular, se tratan como si fueran en modo texto.fuente
1) Para portabilidad, usoEditar: según los comentarios, las terminaciones específicas del sistema de línea se manejan en un nivel inferior.endl. Las nuevas líneas de Windows son\r\n, Linux\ny Mac\r.2)
endllava la corriente,"\n"no lo hace.3) Depende de la portabilidad.En cuanto al uso de memoria, puede minimizarlo volcando a otro almacenamiento con la mayor frecuencia posible
endl. Sin embargo, disminuirá el rendimiento.Editar: aclara algunos errores.
fuente
\nen cualquier máquina moderna.endly\nson equivalentes con respecto a las terminaciones de línea específicas de la plataforma; Las diferencias de plataforma se manejan en un nivel inferior.End of line sequence(asumiendo el modo de texto). ElEnd of line sequencese convierte de nuevo a '\ n` cuando se lee desde un archivo. El punto 3) es dudoso. Y el último párrafo está nuevamente equivocado: el vaciado no le ahorrará espacio y el vaciado más de lo necesario ralentizará su código (el objetivo del búfer es mejorar la eficiencia de escritura en un dispositivo lento).