std::fpos
Определено в заголовке <ios> | ||
|---|---|---|
template< class State > class fpos; |
Специализации шаблона класса std::fpos идентифицируют абсолютные позиции в потоке или в файле. Каждый объект типа fpos содержит позицию байта в потоке (обычно как частный член типа std::streamoff) и текущее состояние сдвига, значение типа State (обычно std::mbstate_t).
Ниже приведены псевдонимы типов для std::fpos<std::mbstate_t> (хотя они написаны иначе в стандарте, они обозначают один и тот же тип):
Определено в заголовке <iosfwd> |
|
|---|---|
| Тип | Определение |
std::streampos | std::fpos<std::char_traits<char>::state_type> |
std::wstreampos | std::fpos<std::char_traits<wchar_t>::state_type> |
std::u8streampos(C++20) | std::fpos<std::char_traits<char8_t>::state_type> |
std::u16streampos (C++11) | std::fpos<std::char_traits<char16_t>::state_type> |
std::u32streampos (C++11) | std::fpos<std::char_traits<char32_t>::state_type> |
Все специализации fpos соответствуют требованиям DefaultConstructible, CopyConstructible, CopyAssignable, Destructible и EqualityComparable.
Если State тривиально копируется, fpos имеет тривиальный конструктор копирования. Если State тривиально копируется, fpos имеет тривиальный оператор копирующего присваивания. Если State тривиально разрушается, у fpos есть тривиальный деструктор.
Параметр шаблона
| State | - | тип, представляющий состояние сдвига |
| Требования к типу | ||
- State должен соответствовать требованиям Destructible, CopyAssignable, CopyConstructible и DefaultConstructible. |
||
Члены-функции
| получает/устанавливает значение состояния сдвига (публичная функция-член) |
Кроме того, предоставляются члены-функции и функции, не являющиеся членами, для поддержки следующих операций:
- Конструктор по умолчанию, который хранит смещение 0 и инициализирует объект состояния значением по умолчанию.
- Конструктор, который не является явным, принимает аргумент типа (возможно, const)
std::streamoff, который хранит это смещение и инициализирует объект состояния значением по умолчанию. Этот конструктор также должен принимать специальное значениеstd::streamoff(-1): возвращаемый некоторыми операциями с потоком объектstd::fposв этом случае указывает ошибки. - Явное преобразование из (возможно, const)
fposвstd::streamoff. Результатом является сохраненное смещение. - operator== и operator!=, которые сравнивают два объекта типа (возможно, const)
std::fposи возвращают значение, преобразуемое в bool.p != qэквивалентно!(p == q). - operator+ и operator- такие, что для объекта
pтипа (возможно, const)fpos<State>и объектаoтипа (возможно, const)std::streamoff.-
p + oимеет типfpos<State>и хранит смещение, которое является результатом добавленияoк смещениюp. -
o + pимеет тип, преобразуемый вfpos<State>, и результат преобразования равенp + o. -
p - oимеет типfpos<State>и хранит смещение, которое является результатом вычитанияoиз смещенияp.
-
- operator+= и operator-=, которые могут принимать (возможно, const)
std::streamoffи добавляют/вычитают его из сохраненного смещения соответственно. - operator-, который может вычитать два объекта типа (возможно, const)
std::fpos, производяstd::streamoff, такое, что для двух таких объектовpиq,p == q + (p - q).
Примечания
Некоторые функции-члены потоков ввода-вывода возвращают и обрабатывают объекты члена-псевдонима типа pos_type. Для потоков эти псевдонимы типов предоставляет параметр шаблона Traits, который по умолчанию равен std::char_traits, который определяет свои pos_type как специализации std::fpos. Поведение библиотеки потоков ввода-вывода не определено, когда Traits::pos_type не является std::fpos<std::mbstate_t> (также известный как std::streampos, std::wstreampos, и т.д.).
Отчеты об ошибках
Следующие изменения поведения, связанные с отчетами об ошибках, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применяется к | Поведение, опубликованное ранее | Правильное поведение |
|---|---|---|---|
| LWG 57 | C++98 |
streampos и wstreampos противоречиворазрешались быть различными, хотя и требовалось быть одинаковыми | определено как одинаковые |
| P0759R1 | C++98 | спецификация была неясной и неполной | уточнено |
| P1148R0 | C++11 | неясно, что и в каком заголовке определения u16streampos и u32streampos | сделано ясным |
См. также
| представляет относительную позицию файла/потока (смещение от fpos), достаточно для представления любого размера файла (typedef) |
|
| возвращает указатель на позицию вывода (публичная функция-член std::basic_ostream<CharT,Traits>) |
|
| устанавливает указатель на позицию вывода (публичная функция-член std::basic_ostream<CharT,Traits>) |
|
| получает указатель на позицию файла (функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/fpos