std::fpos
来自cppreference.com
<tbody>
</tbody>
| 在标头 <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) 。
| ||
成员函数
| 获取/设置迁移状态的值 (公开成员函数) |
另外,提供支持下列操作的成员和非成员函数:
- 默认构造函数,存储零偏移并值初始化状态对象。
- 非 explicit 的构造函数,接受一个(可以是 const 的)std::streamoff 类型的实参,存储它的偏移并值初始化状态对象。此构造函数也必须接受特殊值
std::streamoff(-1):某些流操作返回以此方式构造的std::fpos以指示错误。
- 从(可以是 const 的)
fpos到 std::streamoff 的显式转换。结果是存储的偏移。
operator==和operator!=,比较两个(可以是 const 的)std::fpos类型的对象,返回bool纯右值。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,使得对于两个这种对象p与q有p == q + (p - q)。
注解
一些输入/输出流成员函数返回并操纵成员 typedef pos_type 类型的对象。对于流,这些成员 typedef 由模板形参 Traits 提供,默认为 std::char_traits,它定义它的 pos_type 为 std::fpos 的特化。如果 Traits::pos_type 不是 std::fpos<std::mbstate_t>(别名为 std::streampos、std::wstreampos 等等),则输入/输出流库的行为由实现定义。
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| 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> 的公开成员函数)
| |
| 获取文件位置指示器 (函数) |