std :: :: ios_base mangiato posizionare il cursore alla fine del testo, mentre std :: ios_base_app aggiunge il testo (con un'operazione di scrittura), alla fine, anche se si può ancora leggere dall'inizio :)
std :: ios_base :: trunc tronca il file in modo che venga svuotato, mentre std :: ios_base :: out specifica solo che si desidera scrivere nello stream.
Io attualmente non posso citare la norma (sul mio tablet e Acrobat Reader non lascerò copia incontrato), ma dal punto 27.4.2.1.4 da ISO 14882: 1998 le informazioni si può consultare il link è quasi esatta : http://cplusplus.com/reference/iostream/ios_base/openmode/
Riassumendo:
std::ios_base::app = append
accodamento alla fine del flusso per "cercare [ing] per terminare prima di ogni processo di scrittura"
std::ios_base::ate = At The End
aperto e cercare immed iately alla fine dopo l'apertura
std::ios_base::binary = binary
Eseguire operazioni in binario in contrapposizione al testo
std::ios_base::in = input
Apri in modalità lettura
std::ios_base::out = output
Apri in modalità di scrittura
std::ios_base::trunc = truncate
Tronca il flusso all'apertura ing.
Questi valori sono solo le bandiere, in modo da poter aprire un flusso in lettura/scrittura binario alla fine con:
std::ios_base::in | std::ios_base::out | std::ios_base::ate | std::ios_base::binary
Per quanto riguarda il modo di usare questi valori, è come si desidera. Sono dichiarati come campi statici pubblici nella classe std::ios_base
(vedi 27.4.2), quindi è possibile accedervi utilizzando std::ios::ate
o anche qualcosa come cout.binary
!
I punti in cui si deve prendere l'attenzione è che std::ios_base::ate
non implica std::ios_base::app
né std::ios_base::out
implica std::ios_base::trunc
. Ogni campo ha un significato diverso e un diverso caso di utilizzo, sebbene molti di essi non possano essere usati da soli :)
'std :: ios_base :: in' e' std :: ios :: in' devono essere identico, dipende da te. – oldrinb
@veer si lo sono, così come qualsiasi :: ios_base :: descendant :: in :) – Geoffroy