Pregunta

Antes de declarar esta pregunta como un duplicado de este o eso, por favor considere que he enviado un problema a el juez en línea con \n y obtuve WA, y luego con std::endl y conseguí aire acondicionado.Entonces, necesito una respuesta muy específica al punto de conocimiento de la plataforma:Es \n ¿Realmente tiene en cuenta la plataforma y el tiempo de ejecución realmente escribe el final de línea correcto según la plataforma como afirman las respuestas a las otras preguntas?Si es así, ¿podría decirme cómo sucedió esto?

Si la respuesta puede respaldarse con una cita del estándar con respecto al problema del conocimiento de la plataforma, estaría muy agradecido.He leído todas las respuestas de las demás preguntas (incluso las cerradas), así que no repita lo de "vaciar el búfer".

¿Fue útil?

Solución

De C++11, §27.7.3.8 -

namespace std
{
    template <class charT, class traits>
        basic_ostream<charT,traits>& endl(basic_ostream<charT,traits>& os);
}

Efectos:Llama a os.put(os.widen(’ ’)), luego a os.flush().

Devoluciones:os.

Entonces, desde el estándar está claro que endl vacía el buffer del flujo de salida, mientras \n no.Generalmente querrás usar endl para imprimir una nueva línea, pero también debe tener en cuenta que cada vez que lo haga, el búfer de salida también se vaciará.

Acerca del conocimiento de la plataforma

Según el estándar, es obvio que ambos hacen exactamente lo mismo: imprimir una nueva línea exactamente de la misma manera.Entonces, si uno es independiente de la plataforma, el otro también debería ser el mismo.Ya que lo sé con seguridad endl es independiente de la plataforma, lo mismo debería ser el caso para \n.

Otros consejos

std::endl es un manipulador que genera '\n', luego limpia el arroyo.Para el uso más casual, es lo que deberías usar.Sin embargo, al generar grandes volúmenes de datos, puede resultar en un impacto significativo en el rendimiento, en cuyo caso, use '\n'.

EDITAR:

Con respecto al conocimiento de la plataforma:ambos producen exactamente lo mismo.Si la transmisión se abrió en modo texto, el '\n' provocará que se produzca una representación dependiente de la plataforma de un final de línea:0x0A en Unix, 0x0D, 0x0A en Windows, iniciar un nuevo registro en algunos mainframes, etc.Si la secuencia se abrió en modo binario, provocará que se genere un solo byte (normalmente 0x0A, pero en realidad depende de la codificación de caracteres básica utilizada).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top