std::fpos
来自 cppreference.cn
定义于头文件 <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
的所有特化都满足 DefaultConstructible、 CopyConstructible、 CopyAssignable、 Destructible 和 EqualityComparable 要求。
如果 State
是可平凡复制构造的,则 fpos
具有平凡复制构造函数。如果 State
是可平凡复制赋值的,则 fpos
具有平凡复制赋值运算符。如果 State
是可平凡析构的,则 fpos
具有平凡析构函数。
内容 |
[编辑] 模板参数
State | - | 表示移位状态的类型 |
类型要求 | ||
-State 必须满足 Destructible、 CopyAssignable、 CopyConstructible 和 DefaultConstructible 的要求。 |
[编辑] 成员函数
获取/设置移位状态的值 (公共成员函数) |
此外,还提供了成员函数和非成员函数来支持以下操作
- 默认构造函数,它存储零偏移量并值初始化状态对象。
- 非显式构造函数,它接受类型为(可能是 const)std::streamoff 的参数,该参数存储该偏移量并值初始化状态对象。此构造函数还必须接受特殊值 std::streamoff(-1):以这种方式构造的
std::fpos
由某些流操作返回以指示错误。
- 从(可能是 const)
fpos
到 std::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 的结果。
- p + o 具有类型
- operator+= 和 operator-=,它们可以接受(可能是 const)std::streamoff,并分别从存储的偏移量中添加/减去它。
- operator-,它可以减去类型为(可能是 const)
std::fpos
的两个对象,生成 std::streamoff,这样对于两个这样的对象 p 和 q,p == 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++ 标准。
DR | 应用于 | 已发布行为 | 正确行为 |
---|---|---|---|
LWG 57 | C++98 | streampos 和 wstreampos 矛盾地允许不同,但要求相同 |
澄清为 相同 |
P0759R1 | C++98 | 规范不清晰且不完整 | 已清理 |
P1148R0 | C++11 | 不清楚 u16streampos 和 u32streampos 的定义是什么以及在哪个头文件中 |
已明确 |
LWG 2114 (P2167R3) |
C++98 | 允许相等比较的非 bool 返回类型 | 不允许 |
[编辑] 参见
表示相对文件/流位置(从 fpos 的偏移量),足以表示任何文件大小 (typedef) | |
返回输出位置指示器 ( std::basic_ostream<CharT,Traits> 的公共成员函数) | |
设置输出位置指示器 ( std::basic_ostream<CharT,Traits> 的公共成员函数) | |
获取文件位置指示器 (函数) |