命名空间
变体
操作

std::fpos

来自 cppreference.com
< cpp‎ | io
定义在头文件 <ios>
template< class State >
class fpos;

类模板 std::fpos 的特化标识了流或文件中绝对位置。每个 fpos 类型的对象都保存了流中的字节位置(通常作为 std::streamoff 类型的私有成员),以及当前的移位状态,一个 State 类型的值(通常是 std::mbstate_t)。

以下为 std::fpos<std::mbstate_t> 提供的 typedef 名称(虽然它们在标准中拼写不同,但它们表示相同的类型)

定义在头文件 <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 的特化都满足 DefaultConstructibleCopyConstructibleCopyAssignableDestructible 以及 EqualityComparable 要求。

如果 State 是平凡的拷贝构造的,fpos 具有平凡的拷贝构造函数。如果 State 是平凡的拷贝赋值的,fpos 具有平凡的拷贝赋值运算符。如果 State 是平凡的析构的,fpos 具有平凡的析构函数。

内容

[编辑] 模板参数

State - 表示移位状态的类型
类型要求
-
State 必须满足 DestructibleCopyAssignableCopyConstructible 以及 DefaultConstructible 要求。

[编辑] 成员函数

获取/设置移位状态的值
(公共成员函数)

此外,还提供了成员函数和非成员函数以支持以下操作

  • 一个默认构造函数,它存储一个偏移量 0 并初始化状态对象。
  • 一个非显式构造函数,它接受一个 (possibly const) std::streamoff 类型的参数,存储该偏移量并初始化状态对象。此构造函数还必须接受特殊值 std::streamoff(-1):以这种方式构造的 std::fpos 由某些流操作返回,以指示错误。
  • 从 (possibly const) fposstd::streamoff 的显式转换。结果是存储的偏移量。
  • operator==operator!= 用于比较两个 (possibly const) std::fpos 类型的对象,并返回一个 bool prvalue。 p != q 等效于 !(p == q).
  • operator+operator- 使得对于一个 (possibly const) fpos<State> 类型的对象 p 和一个 (possibly const) std::streamoff 类型的对象 o
  • p + o 具有 fpos<State> 类型,并存储一个偏移量,该偏移量是将 o 添加到 p 的偏移量后的结果。
  • o + p 具有可转换为 fpos<State> 的类型,转换结果等于 p + o.
  • p - o 具有 fpos<State> 类型,并存储一个偏移量,该偏移量是将 op 的偏移量中减去后的结果。
  • operator+=operator-= 可以接受一个 (possibly const) std::streamoff,并分别将其添加到存储的偏移量中或从存储的偏移量中减去。
  • operator- 可以减去两个 (possibly const) std::fpos 类型的对象,产生一个 std::streamoff,使得对于两个这样的对象 pqp == q + (p - q).

[编辑] 说明

一些 I/O 流成员函数 返回和操作成员 typedef pos_type 的对象。对于流,这些成员 typedef 由模板参数 Traits 提供,默认值为 std::char_traits,它们定义了它们的 pos_typestd::fpos 的特化。当 Traits::pos_type 不是 std::fpos<std::mbstate_t>(即 std::streamposstd::wstreampos 等)时,I/O 流库的行为是实现定义的。

[编辑] 缺陷报告

以下行为更改的缺陷报告被追溯应用于以前发布的 C++ 标准。

DR 应用于 发布的行为 正确行为
LWG 57 C++98 streamposwstreampos 存在矛盾
允许不同但要求相同
澄清为
相同
P0759R1 C++98 规范不明确且不完整 清理
P1148R0 C++11 不清楚什么以及在哪个头文件中
定义 u16streamposu32streampos
明确
LWG 2114
(P2167R3)
C++98 bool 类型的等式比较被允许 不允许

[编辑] 另请参阅

表示相对文件/流位置(相对于 fpos 的偏移量),足以表示任何文件大小
(typedef) [编辑]
返回输出位置指示器
(std::basic_ostream<CharT,Traits> 的公共成员函数) [编辑]
设置输出位置指示器
(std::basic_ostream<CharT,Traits> 的公共成员函数) [编辑]
获取文件位置指示器
(函数) [编辑]