Spec-Zone.ru › C++

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.

Функции-члены

state
получает/задаёт значение состояния сдвига
(открытая функция-член)

Кроме того, для поддержки следующих операций предоставляются функции-члены и нешаблонные функции:

  • Конструктор по умолчанию, который сохраняет смещение, равное нулю, и инициализирует объект состояния значением по умолчанию.
  • Неявный конструктор, принимающий аргумент типа (возможно, 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 запрещено

См. также

streamoff
представляет относительную позицию в файле/потоке (смещение относительно fpos), достаточную для представления любого размера файла
(псевдоним типа)
tellp
возвращает индикатор позиции вывода
(открытая функция-член std::basic_ostream<CharT,Traits>)
seekp
устанавливает индикатор позиции вывода
(открытая функция-член std::basic_ostream<CharT,Traits>)
fgetpos
получает индикатор позиции файла
(функция)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/io/fpos

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API