2012-09-03 15 views
18

Lo que el punto de la std::ios_base::ate (que no sea std::ios_base::app, por ejemplo) y std::ios_base::trunc (que no sea std::ios_base::out, por ejemplo)?std :: :: ios_base comió y std :: :: trunc ios_base

¿Y debería preferir escribir std::ios_base::smth en lugar de std::ios::smth?

+1

'std :: ios_base :: in' y' std :: ios :: in' deben estar idéntico, depende de usted. – oldrinb

+0

@veer sí lo son, como también cualquier :: ios_base :: descenddant :: in :) – Geoffroy

Respuesta

16

std :: :: ios_base comió posicionar el cursor al final del texto, mientras que std :: ios_base_app añade el texto (con una operación de escritura) al final, aunque todavía se puede leer desde el principio :)

std :: ios_base :: trunc trunca el archivo para que se vacíe, mientras que std :: ios_base :: out solo especifica que desea escribir en la secuencia.

Actualmente no puedo citar el estándar (en mi tableta y Acrobat Reader no me deja copiar) pero desde el párrafo 27.4.2.1.4 de ISO 14882: 1998 la información que puede ver en el enlace es casi exacta : http://cplusplus.com/reference/iostream/ios_base/openmode/

en resumen:

std::ios_base::app = append 

Anexar al final de la corriente por "buscar [ing] para finalizar antes de cada escritura"

std::ios_base::ate = At The End 

abierto y buscar immed iately al final después de la apertura

std::ios_base::binary = binary 

Realiza la operación en binario en oposición al texto

std::ios_base::in = input 

abierto en modo de lectura

std::ios_base::out = output 

abierto en modo escritura

std::ios_base::trunc = truncate 

Truncar la secuencia en abierto En g.

Estos valores son sólo banderas, por lo que puede abrir una secuencia de lectura/escritura binaria al final con:

std::ios_base::in | std::ios_base::out | std::ios_base::ate | std::ios_base::binary 

En cuanto a la forma de utilizar esos valores, es como desee. Se declaran como campos públicos estáticos en la clase std::ios_base (ver 27.4.2) por lo que es posible acceder a ellos usando std::ios::ate o incluso algo así como cout.binary!


Los puntos donde se debe tomar la atención es que std::ios_base::ate no implica std::ios_base::app ni tampoco implica std::ios_base::outstd::ios_base::trunc. Cada campo tiene un significado diferente y un caso de uso diferente, aunque la mayoría de ellos no se pueden usar solos :)

+0

Pero std :: ios_base :: out también borra los datos en el archivo, ¿no? ¿Puede darme un ejemplo en el que std :: ios_base :: out no borre el archivo? – FrozenHeart

+0

Desde aquí: http: // cplusplus.com/reference/iostream/iostrebase/openmode/obtienes la definición de cada valor. Además, este comentario de answer @ veer sobre std :: ios_base :: in y std :: ios :: en – Geoffroy

+0

¿Y qué quiere decir con "todavía se puede leer desde el principio"? ¿Puedes darme un ejemplo, por favor? – FrozenHeart

Cuestiones relacionadas