std :: ios_base :: ate и std :: ios_base :: trunc

Какой смысл std::ios_base::ate (Кроме как std::ios_base::appнапример) и std::ios_base::trunc (Кроме как std::ios_base::out, например)?

И лучше ли мне писать std::ios_base::smth вместо std::ios::smth?

19

Решение

std :: ios_base :: ate позиционирует курсор в конце текста, тогда как std :: ios_base_app добавляет текст (с операцией записи) в конце, хотя вы все равно можете читать с самого начала 🙂

std :: ios_base :: trunc усекает файл, чтобы он был очищен, тогда как std :: ios_base :: out просто указывает, что вы хотите записать в поток.

В настоящее время я не могу процитировать стандарт (на моем планшете и Acrobat Reader не разрешат встретить копию), но из пункта 27.4.2.1.4 из ISO 14882: 1998 информация, которую вы видите по ссылке, является почти точной: http://cplusplus.com/reference/iostream/ios_base/openmode/

Подводить итоги:

std::ios_base::app = append

Добавлять в конце потока словами «искать [конец] перед каждой записью»

std::ios_base::ate = At The End

Открыть и искать сразу в конце после открытия

std::ios_base::binary = binary

Выполните операцию в двоичном формате, в отличие от текста

std::ios_base::in = input

Открыть в режиме чтения

std::ios_base::out = output

Открыть в режиме записи

std::ios_base::trunc = truncate

Усекать поток при открытии.

Эти значения являются просто флагами, поэтому вы можете открыть поток в двоичном файле для чтения / записи в конце:

std::ios_base::in | std::ios_base::out | std::ios_base::ate | std::ios_base::binary

Что касается способа использования этих значений, то это как вы пожелаете. Они объявлены как открытые статические поля в std::ios_base класс (см. 27.4.2), таким образом, к ним можно получить доступ, используя std::ios::ate или даже что-то вроде cout.binary !


Точки, на которые вы должны обратить внимание, это то, что std::ios_base::ate НЕ подразумевает std::ios_base::app и не делает std::ios_base::out подразумевает std::ios_base::trunc, Каждое поле имеет разное значение и разные варианты использования, хотя большинство из них нельзя использовать отдельно 🙂

17

Другие решения

Других решений пока нет …