std::fpos
來自 cppreference.com
定義於標頭檔案 <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
的特化都滿足 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 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 的結果。
- 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++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
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> 的 public 成員函式) | |
設定輸出位置指示器 ( std::basic_ostream<CharT,Traits> 的 public 成員函式) | |
獲取檔案位置指示器 (函式) |