std::fpos
来自 cppreference.com
定义在头文件 <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 要求。 |
[编辑] 成员函数
获取/设置移位状态的值 (公共成员函数) |
此外,还提供了成员函数和非成员函数以支持以下操作
- 一个默认构造函数,它存储一个偏移量 0 并初始化状态对象。
- 一个非显式构造函数,它接受一个 (possibly const) std::streamoff 类型的参数,存储该偏移量并初始化状态对象。此构造函数还必须接受特殊值 std::streamoff(-1):以这种方式构造的
std::fpos
由某些流操作返回,以指示错误。
- 从 (possibly const)
fpos
到 std::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>
类型,并存储一个偏移量,该偏移量是将 o 从 p 的偏移量中减去后的结果。
- p + o 具有
- operator+= 和 operator-= 可以接受一个 (possibly const) std::streamoff,并分别将其添加到存储的偏移量中或从存储的偏移量中减去。
- operator- 可以减去两个 (possibly 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> 的公共成员函数) | |
获取文件位置指示器 (函数) |