命名空间
变体
操作

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::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> 的公共成员函数) [编辑]
获取文件位置指示器
(函数) [编辑]