std:: fpos
|
定义于头文件
<ios>
|
||
|
template
<
class
State
>
class fpos ; |
||
类模板
std::fpos
的特化用于标识流或文件中的绝对位置。每个
fpos
类型的对象持有流中的字节位置(通常作为
std::streamoff
类型的私有成员)以及当前移位状态,即
State
类型的值(通常为
std::mbstate_t
)。
以下为 std :: fpos < std:: mbstate_t > 提供的类型定义名称(尽管在标准中拼写不同,但它们表示同一类型):
|
定义于头文件
<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 纯右值。 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 - = 运算符,可接受(可能为常量) std::streamoff 类型参数,并分别对存储的偏移量进行加减操作。
-
operator
-
可以减去两个(可能为 const 的)
std::fpos类型对象,生成一个 std::streamoff ,使得对于两个这样的对象 p 和 q ,满足 p == q + ( p - q ) 。
注释
部分
I/O流成员函数
会返回并操作成员类型别名
pos_type
的对象。对于流而言,这些成员类型别名由模板参数
Traits
提供(默认为
std::char_traits
),该参数将其
pos_type
定义为
std::fpos
的特化。当
Traits::pos_type
不是
std
::
fpos
<
std::
mbstate_t
>
(即
std::streampos
、
std::wstreampos
等)时,I/O流库的行为由实现定义。
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的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>
的公开成员函数)
|
|
|
获取文件位置指示器
(函数) |