2010-02-09 9 views

Respuesta

1

gracias por todas las personas que me respondió: i Probado varios códigos en función de lo que han sido contestadas y se acercó con este resumen:

usando ofstream: ios :: out es el valor por defecto, incluso si no se especifica nada, pero si solo usó ios :: in con ofstream, no hay errores de compilación (a menos que utilice read() o >> o algún objeto de flujo) pero no se escribirán archivos.

usando ifstream: en ios :: es el valor predeterminado, incluso si no se especifica nada, pero si se ha utilizado sólo ios :: cabo con ifstream, no hay errores de compilación (a menos que utilice escritura() o < < o alguna ofstream object) pero no puede leer ninguna información del archivo.

usando fstream: no hay valores por defecto, usted tiene que determinar de manera explícita lo que se va a hacer. De lo contrario, no hay error de compilación, pero no obtienes lo que quieres simplemente.

en cuanto a la pregunta original, ambos funcionan exactamente igual.

5

Para una ofstream, ios::out es el valor por defecto, así que no hay diferencia. Creo que la única vez que especifica ios :: out hace una diferencia es si usas un fstream, que se puede abrir para leer o escribir, o ambos.

+0

no si usa un fstream, no puede escribir ni ios :: out ni ios :: in y todavía podrá escribir y leer desde el archivo .. así que ¿no es siempre la misma escritura? de no escribir ios :: fuera? –

+0

@Imengineer: Tendría que verificar para estar seguro, pero si la memoria sirve, se abre un fstream tanto para la entrada como para la salida de manera predeterminada, pero si especifica ios :: out, se abre solo para la salida, y si especifica ios :: in, está abierto solo para entrada. Eso está pasando de la memoria, definitivamente no está garantizado. –

2

En la mayoría de los casos, esperaría que no hubiera ninguna diferencia, aunque parece que esto podría ser técnicamente específico.

En mi implementación (gcc 3.4.3), open para thestream utiliza el modo ios ::: out en la llamada ofstream-> open() independientemente de lo que se especifique mediante el constructor, por lo que es puramente opcional. Si usa fstream, este no es el caso y debería especificarse explícitamente.

2

Comprobación de la Norma, la sección 27.8.1.3 se analizan los diversos modificadores ios (como ios::in y ios::out), y los asigna a los parámetros C fopen(). De acuerdo con el estándar, si no hay modificadores especificados en un archivo abierto, el abierto falla.

En 27.8.1.9, encontramos que ofstream funciona de esa manera, pero con ios::out especificado automáticamente. Por lo tanto, la respuesta a la pregunta original es que ambos funcionarán exactamente igual.

no sé por qué la gente está encontrando que la apertura con un fstream sin que ninguna de ios::in o ios::out, pero mi lectura de la norma dice que no funcione. Me interesarían las lecturas de 27.8.1.3 de otras personas.

+0

dónde encontrar este estándar? –

Cuestiones relacionadas