Il costruttore filebuf
al quale sono passati questi flag & dagger; ha comportamenti basati su quelle bandiere definite nella Tabella 132 in C++ 11:
+-----------------------------------+-------------------+
| ios_base flag combination | stdio equivalent |
| binary in out trunc app | |
+-----------------------------------+-------------------+
| + | "w" |
| + + | "a" |
| + | "a" |
| + + | "w" |
| + | "r" |
| + + | "r+" |
| + + + | "w+" |
| + + + | "a+" |
| + + | "a+" |
+-----------------------------------+-------------------+
| + + | "wb" |
| + + + | "ab" |
| + + | "ab" |
| + + + | "wb" |
| + + | "rb" |
| + + + | "r+b" |
| + + + + | "w+b" |
| + + + + | "a+b" |
| + + + | "a+b" |
+-----------------------------------+-------------------+
Come si può vedere, la combinazione di bandiera è non trovato in tale tabella.
[C++11: 27.9.1.4/2]:
[..] Se mode
non è una combinazione di bandiere indicati nella tabella allora l'open fallisce.
Quelle sono la semantica.
e pugnale;[C++11: 27.9.1.7/2]
& [C++11: 27.9.1.11/2]
indica che la modalità viene passata dall'oggetto flusso all'oggetto buffer.
fonte
2013-02-26 08:49:03
http://en.cppreference.com/w/cpp/io/ios_base/openmode – Zeta
La documentazione non dice che 'ios :: app' non può essere combinato con' ios :: trunc'. – xmllmx
Cosa stai cercando di fare? std :: ios :: trunc sostanzialmente elimina tutto mentre std :: ios :: app si aggiunge. – CLearner