std :: ios_base :: jedli umieścić kursor na końcu tekstu, podczas gdy std :: ios_base_app dopisuje tekst (z operacji zapisu) na końcu, choć nadal można czytać od początku :)
std :: ios_base :: trunc obcina plik, więc jest opróżniany, podczas gdy std :: ios_base :: out po prostu określa, że chcesz pisać do strumienia.
Obecnie nie mogę zacytować standardu (na moim tablecie i Acrobat Reader nie pozwala na wykonanie kopii), ale z punktu 27.4.2.1.4 z ISO 14882: 1998 informacje, które można zobaczyć na łączu są prawie dokładne : http://cplusplus.com/reference/iostream/ios_base/openmode/
Podsumowując:
std::ios_base::app = append
Dołącz na koniec strumienia przez "szukać [ing], aby zakończyć przed każdym write"
std::ios_base::ate = At The End
Otwórz i zasięgnąć IMMED iately na końcu po otwarciu
std::ios_base::binary = binary
wykonać operację binarnie w przeciwieństwie do tekstu
std::ios_base::in = input
Otwórz w trybie odczytu
std::ios_base::out = output
w trybie zapisu
std::ios_base::trunc = truncate
Skróć strumień na otwarty ing.
Wartości te są tylko flagi, więc można otworzyć strumień w odczytu/zapisu binarnego na końcu z:
std::ios_base::in | std::ios_base::out | std::ios_base::ate | std::ios_base::binary
dotyczące sposobu korzystania z tych wartości, to jak chcesz. Są one zadeklarowane jako publiczne pola statyczne w klasie std::ios_base
(patrz 27.4.2), więc można uzyskać do nich dostęp za pomocą std::ios::ate
lub nawet coś w rodzaju cout.binary
!
Punkty, w których należy podjąć uwagę jest to, że std::ios_base::ate
nie oznacza std::ios_base::app
ani nie std::ios_base::out
implikuje std::ios_base::trunc
. Każde pole ma inne znaczenie i inny przypadek użycia, ale większość z nich nie może być użyta samodzielnie :)
'std :: ios_base :: in' i' std :: ios :: in' powinno być identyczne, to zależy od ciebie. – oldrinb
@veer tak są one, jak również wszelkie :: ios_base :: potomek :: w :) – Geoffroy