std::fpos
| 定義於標頭檔 <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 必須滿足 Destructible、CopyAssignable、CopyConstructible 和 DefaultConstructible 的要求。 | ||
[編輯] 成員函式
| 取得/設定位移狀態的值 (公開成員函式) |
此外,還提供了成員函式和非成員函式以支援下列操作:
- 一個預設建構子,儲存為 0 的偏移量並值初始化(value-initialize)狀態物件。
- 一個非顯式建構子,接受一個(可能為 const)std::streamoff 型別的引數,儲存該偏移量並值初始化狀態物件。此建構子也必須接受特殊值 std::streamoff(-1):以這種方式建構的
std::fpos由某些串流操作回傳,用於指示錯誤。
- 從(可能為 const)
fpos到 std::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>,並儲存一個將 o 從 p 的偏移量中減去後的結果。
- p + o 的型別為
- operator+= 和 operator-= 可接受一個(可能為 const)std::streamoff,並分別對儲存的偏移量進行加/減運算。
- operator- 可減去兩個(可能為 const)
std::fpos型別的物件並產生一個 std::streamoff,使得對於兩個此類物件 p 和 q,p == 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++ 標準。
| DR | 應用於 | 出版時的行為 | 正確的行為 |
|---|---|---|---|
| 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> 的公開成員函式) | |
| 取得檔案位置指示器 (function) |