Spec-Zone.ru › C++

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.

Члены-функции

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

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

  • Конструктор по умолчанию, который хранит смещение 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
сделано ясным

См. также

streamoff
представляет относительную позицию файла/потока (смещение от fpos), достаточно для представления любого размера файла
(typedef)
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/w/cpp/io/fpos

Spec-Zone.ru

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