C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- C 风格文件输入/输出
- std::basic_streambuf
- std::basic_filebuf
- std::basic_stringbuf
- 输入/输出操纵符
- std::strstreambuf
- std::basic_syncbuf
- std::basic_ios
- std::basic_istream
- std::ios_base
- std::basic_osyncstream
- std::basic_ostream
- std::basic_iostream
- std::basic_ifstream
- std::basic_ofstream
- std::basic_fstream
- std::basic_istringstream
- std::basic_ostringstream
- std::basic_stringstream
- std::istrstream
- std::ostrstream
- std::strstream
- std::streamoff
- std::streamsize
- std::fpos
- std::iostream_category
- std::io_errc
- std::cin, std::wcin
- std::cout, std::wcout
- std::cerr, std::wcerr
- std::clog, std::wclog
- 注释
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
std::fpos
定义于头文件 <ios>
|
||
template< class State > class fpos; |
||
类模板 std::fpos 的特化标识流或文件中的绝对位置。每个 fpos
类型对象保有流中的字节位置(常为 std::streamoff 类型的私有成员)和当前迁移状态, State
类型值(常为 std::mbstate_t )。
提供下列 std::fpos 特化:
类型 | 定义 |
streampos
|
std::fpos<std::char_traits<char>::state_type> |
wstreampos
|
std::fpos<std::char_traits<wchar_t>::state_type> |
u8streampos (C++20 起)
|
std::fpos<std::char_traits<char8_t>::state_type> |
u16streampos (C++11 起)
|
std::fpos<std::char_traits<char16_t>::state_type> |
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 的显式转换。结果是存储的偏移。
- 比较二个(可为 const 的)
std::fpos
类型,返回可转换为 bool 的类型的 operator== 和 operator!= 。 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) 。
注意
要求 std::streampos
与 std::wstreampos
为同一类型,因为要求 std::char_traits<char>::state_type 与 std::char_traits<wchar_t>::state_type 均为 std::mbstate_t 。 C++98 有过自相矛盾的陈述,说若实现支持窄面向 iostream 中的无迁移编码,则它们可以不同,但在宽面向流中支持一或多个迁移编码,不过这在 C++03 中更正了。
一些 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 | 应用于 | 出版时的行为 | 正确行为 |
---|---|---|---|
P0759R1 | C++98 | 规定不清晰且不完整 | 已整理 |
P1148R0 | C++11 | 不明确哪个头文件定义 u16streampos 和 u32streampos 或其定义是什么
|
使之明确 |
参阅
表示相对的文件/流位置(距 fpos 的偏移),足以表示任何文件大小 (typedef) | |
返回输出位置指示器 ( std::basic_ostream<CharT,Traits> 的公开成员函数) | |
设置输出位置指示器 ( std::basic_ostream<CharT,Traits> 的公开成员函数) | |
获取文件位置指示器 (函数) |