命名空间
变体
操作

std::fpos

来自 cppreference.cn
< 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 的特化都满足 DefaultConstructibleCopyConstructibleCopyAssignableDestructibleEqualityComparable 的要求。

如果 State 是可平凡复制构造的,则 fpos 具有平凡复制构造函数。如果 State 是可平凡复制赋值的,则 fpos 具有平凡复制赋值运算符。如果 State 是可平凡析构的,则 fpos 具有平凡析构函数。

目录

[编辑] 模板参数

State - 表示移位状态的类型
类型要求
-
State 必须满足 DestructibleCopyAssignableCopyConstructibleDefaultConstructible 的要求。

[编辑] 成员函数

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

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

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

[编辑] 注意

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

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
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> 的 public 成员函数) [编辑]
设置输出位置指示器
(std::basic_ostream<CharT,Traits> 的 public 成员函数) [编辑]
获取文件位置指示器
(函数) [编辑]