std::fpos
Определён в заголовочном файле <ios> | ||
|---|---|---|
template< class State > class fpos; |
Специализации шаблона класса std::fpos обозначают абсолютные позиции в потоке или файле. Каждый объект типа fpos хранит позицию байта в потоке (обычно в виде закрытого члена типа std::streamoff) и текущее состояние сдвига — значение типа State (обычно std::mbstate_t).
Предоставлены следующие имена typedef для 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. |
||
Функции-члены
| получает/задаёт значение состояния сдвига (открытая функция-член) |
Кроме того, для поддержки следующих операций предоставляются функции-члены и нешаблонные функции:
- Конструктор по умолчанию, который сохраняет смещение, равное нулю, и инициализирует объект состояния значением по умолчанию.
- Неявный конструктор, принимающий аргумент типа (возможно, const)
std::streamoff, который сохраняет это смещение и инициализирует объект состояния значением по умолчанию. Этот конструктор также должен принимать специальное значениеstd::streamoff(-1): объектstd::fpos, созданный таким образом, возвращается некоторыми операциями с потоками для обозначения ошибок. - Явное преобразование из (возможно, const)
fposвstd::streamoff. Результатом является сохранённое смещение. -
operator== и operator!=, которые сравнивают два объекта типа (возможно, const)
std::fposи возвращают prvalue типа 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++.
| Отчёт об ошибке | Применяется к | Опубликованное поведение | Корректное поведение |
|---|---|---|---|
| LWG 57 | C++98 |
streampos и wstreampos противоречиворазрешалось различаться, хотя они должны были быть одинаковыми | уточнено, что они должны быть одинаковыми |
| P0759R1 | C++98 | спецификация была неясной и неполной | уточнена |
| P1148R0 | C++11 | не было ясно, что представляют собой определения u16streampos и u32streampos и в каком заголовочном файле они находятся | прояснено |
|
LWG 2114 (P2167R3) | C++98 | допускались возвращаемые типы сравнений на равенство, отличные от bool | запрещено |
См. также
| представляет относительную позицию в файле/потоке (смещение относительно fpos), достаточную для представления любого размера файла (псевдоним типа) |
|
| возвращает индикатор позиции вывода (открытая функция-член 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/cpp/io/fpos