名稱空間
變體
操作

std::fpos

來自 cppreference.com
< cpp‎ | io
定義於標頭檔案 <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 的特化都滿足 DefaultConstructibleCopyConstructibleCopyAssignableDestructibleEqualityComparable 的要求。

如果 State 是可平凡複製構造的,則 fpos 具有平凡複製建構函式。如果 State 是可平凡複製賦值的,則 fpos 具有平凡複製賦值運算子。如果 State 是可平凡析構的,則 fpos 具有平凡解構函式。

目錄

[編輯] 模板引數

State - 表示移位狀態的型別
型別要求
-
State 必須滿足 DestructibleCopyAssignableCopyConstructibleDefaultConstructible 的要求。

[編輯] 成員函式

獲取/設定移位狀態的值
(公開成員函式)

此外,還提供了成員函式和非成員函式來支援以下操作

  • 一個預設建構函式,它儲存零偏移量並對狀態物件進行值初始化。
  • 一個非顯式建構函式,它接受一個 (可能為 const) std::streamoff 型別的引數,該引數儲存該偏移量並對狀態物件進行值初始化。此建構函式還必須接受特殊值 std::streamoff(-1):以這種方式構造的 std::fpos 由某些流操作返回以指示錯誤。
  • 從 (可能為 const) fposstd::streamoff 的顯式轉換。結果是儲存的偏移量。
  • operator==operator!=,它們比較兩個 (可能為 const) std::fpos 型別的物件並返回一個 bool prvalue。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,使得對於兩個這樣的物件 pqp == 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++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 57 C++98 streamposwstreampos 相互矛盾地
允許不同但要求相同
澄清為
相同
P0759R1 C++98 規範不清晰且不完整 已清理
P1148R0 C++11 不清楚 u16streamposu32streampos 的定義是什麼以及在哪個標頭檔案中
定義
已明確
LWG 2114
(P2167R3)
C++98 允許相等比較的非 bool 返回型別 已停用

[編輯] 參見

表示相對檔案/流位置(從 fpos 偏移),足以表示任何檔案大小
(typedef) [編輯]
返回輸出位置指示器
(std::basic_ostream<CharT,Traits> 的 public 成員函式) [編輯]
設定輸出位置指示器
(std::basic_ostream<CharT,Traits> 的 public 成員函式) [編輯]
獲取檔案位置指示器
(函式) [編輯]