命名空間
變體
動作

std::fpos

出自 cppreference.com
< cpp‎ | io
定義於標頭檔 <ios>
template< class State >
class fpos;

類別模板 std::fpos 的特化用於標識串流或檔案中的絕對位置。每個 fpos 型別的物件都會保存串流中的位元組位置(通常作為型別為 std::streamoff 的私有成員)以及當前的位移狀態(shift state),即一個型別為 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 是可平凡複製建構的(trivially copy constructible),則 fpos 具有平凡複製建構子。若 State 是可平凡複製賦值的,則 fpos 具有平凡複製賦值運算子。若 State 是可平凡解構的,則 fpos 具有平凡解構子。

目錄

[編輯] 模板參數

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

[編輯] 成員函式

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

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

  • 一個預設建構子,儲存為 0 的偏移量並值初始化(value-initialize)狀態物件。
  • 一個非顯式建構子,接受一個(可能為 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>,並儲存一個將 op 的偏移量中減去後的結果。
  • 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::streamposstd::wstreampos 等)時,I/O 串流庫的行為由實作定義。

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯應用於之前的 C++ 標準。

DR 應用於 出版時的行為 正確的行為
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> 的公開成員函式) [編輯]
設定輸出位置指示器
(std::basic_ostream<CharT,Traits> 的公開成員函式) [編輯]
取得檔案位置指示器
(function) [編輯]
English Deutsch 日本語 한국어 中文(简体) 中文(繁體)