una son que portatiles para mejores mejor las laptops laptop gamers gamer estudiantes cuales computadoras comprar caracteristicas buena baratas c++ portability eol end-of-line

c++ - son - mejores laptops para estudiantes



Fin de linea portatil (5)

Bueno, el STL tiene std :: endl, que puedes usar como

std::cout << "Hi five!" << std::endl;

Tenga en cuenta que además de agregar una línea final, std :: endl también vacía el búfer, lo que puede tener consecuencias de rendimiento indeseables.

¿Hay alguna forma de utilizar automáticamente el carácter EOL correcto dependiendo del sistema operativo utilizado?

Estaba pensando en algo como std::eol ?

Sé que es muy fácil usar directivas de preprocesador, pero es curioso si ya está disponible.

Lo que me interesa es que generalmente tengo algunos mensajes en mis aplicaciones que luego combino en una sola cadena y quiero separarlos con un EOL. Sé que podría usar std::stringstream << endl pero a veces parece ser una exageración en lugar de un apéndice regular.


Los archivos, incluso los archivos de texto, a menudo se transfieren entre máquinas, por lo que el "carácter de nueva línea específico del sistema operativo" es un oxímoron.

Sin embargo, es cierto que los sistemas operativos tienen algo que decir al respecto, en particular un sistema operativo conocido como Windows, aunque muchos programas de Windows leerán los archivos / n-espaciados correctamente, aunque el control de edición multilínea winapi no lo haría. Le sugiero que considere dos veces lo que es correcto para usted: no es necesariamente lo que recomienda su sistema operativo. Si sus archivos alguna vez se almacenarán en medios extraíbles, no utilice el estándar del sistema operativo. Utilice estándar global, 0xA.


Si desea escribir un separador de línea en una secuencia:

std::cout << ''/n'';

o

std::cout << "/n";

o

std::cout << "whatever you were going to say anyway/n";

Si la transmisión es en modo de texto y el sistema operativo utiliza algo que no sea LF como separador, se convertirá.

Si desea escribir un separador de línea y vaciar el flujo:

std::cout << std::endl;

Si tiene una salida en modo binario por cualquier motivo y desea escribir un salto de línea específico de la plataforma, entonces creo que podría tener que hacerlo indirectamente (escriba ''/n'' en una secuencia de texto y luego examínelo en modo binario para ver lo que obtienes). Posiblemente haya alguna forma de obtener directamente la secuencia de salto de línea de la implementación, que no conozco. De todos modos, no es una buena idea: si está escribiendo o leyendo un archivo en modo binario, debería estar en un formato que defina los saltos de línea independientemente del sistema operativo, o que no tenga líneas. Para eso es el modo binario.


Solo abre un archivo en modo texto

FILE *fp = fopen( "your_file.txt", "w+t" );

y entonces

fprintf( fp, "some string and integer %d/n", i ); fclose(fp);

y el sistema operativo se hará cargo de la EOL según sus estándares.


std::endl está definido para no hacer nada más que escribir ''/n'' en la secuencia y vaciarlo (§27.6.2.7). El vaciado está definido para no hacer nada para una stringstream , por lo que te queda una manera bonita de decir mystringstream << ''/n'' . La implementación de la biblioteca estándar en su sistema operativo convierte /n apropiada, por lo que no es su preocupación.

Por endl tanto, endl ya es lo último en rendimiento y portabilidad, y lo único que podría desear es << ''/n'' si está intentando escribir de manera eficiente en un archivo (no en un cadena de caracteres). Bueno, << ''/n'' también elimina la llamada virtual sin sentido a stringbuf::flush . A menos que el perfil muestre que la función vacía llama a tomarse un tiempo, no lo piense.