Namespaces
Variants

std:: fpos

From cppreference.net
< cpp ‎ | io
定义于头文件 <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 的结果。
  • 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> 的公开成员函数)
获取文件位置指示器
(函数)