2012-09-03 16 views
18

Che il punto della std::ios_base::ate (diverso std::ios_base::app, per esempio) e std::ios_base::trunc (diversi std::ios_base::out, per esempio)?std :: :: ios_base mangiava e std :: :: trunc ios_base

E dovrei preferibilmente scrivere std::ios_base::smth anziché std::ios::smth?

+1

'std :: ios_base :: in' e' std :: ios :: in' devono essere identico, dipende da te. – oldrinb

+0

@veer si lo sono, così come qualsiasi :: ios_base :: descendant :: in :) – Geoffroy

risposta

16

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::appstd::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 :)

+0

Ma std :: ios_base :: out cancella anche i dati nel file, no? Puoi darmi un esempio in cui std :: ios_base :: out non cancella il file? – FrozenHeart

+0

Da qui: http: // cplusplus.com/reference/iostream/ios_base/openmode/ottieni la definizione di ogni valore. Inoltre, questa risposta è il commento di @ veer su std :: ios_base :: in e std :: ios :: in – Geoffroy

+0

E cosa intendi con "puoi ancora leggere dall'inizio"? Puoi darmi un esempio, per favore? – FrozenHeart

Problemi correlati