std::basic_filebuf<CharT,Traits>::overflow
來自 cppreference.com
< cpp | io | basic filebuf
protected: virtual int_type overflow( int_type ch = Traits::eof() ); |
||
將寫入區的一些資料寫入關聯的字元序列(到檔案)。
行為與基類版本 std::basic_streambuf::overflow() 相同,除了“消費字元”的行為定義如下:
1) 首先,使用所注入區域設定的 std::codecvt::out 將字元轉換為外部(可能是多位元組)表示,儲存在一個臨時緩衝區中,如下所示:(XSIZE 是某個未指定的緩衝區大小)
const std::codecvt<CharT, char, typename Traits::state_type>& a_codecvt = std::use_facet<std::codecvt<CharT, char, typename Traits::state_type>>(getloc()); typename Traits::state_type state; CharT* end; char xbuf[XSIZE]; char* xbuf_end; std::codecvt_base::result r = a_codecvt.out(state, pbase(), pptr(), end, xbuf, xbuf + XSIZE, xbuf_end);
2) 然後將緩衝區中所有完全轉換的字元寫入檔案。根據 r 的值,正式執行以下步驟:
r | 操作 |
---|---|
std::codecvt_base::ok | 將 [ xbuf, xbuf_end) 中的字元輸出到檔案,如果輸出失敗則失敗。此時,如果 pbase() != pptr() 和 pbase() == end 都為 true(這意味著 xbuf 不足以容納一個外部字元),則增加 XSIZE 並從頭開始重複。 |
std::codecvt_base::partial | 將 [ xbuf, xbuf_end) 中已轉換的外部字元輸出到檔案,並使用 [ end, pptr()) 中剩餘未轉換的內部字元重複。如果輸出失敗,則失敗(不重複)。 |
std::codecvt_base::noconv | 將 [ pbase(), pptr()) 中的字元輸出到檔案。 |
std::codecvt_base::error | 失敗。 |
如果關聯檔案未開啟(is_open() 返回 false),則輸出總是失敗。
3) 建立一個 可觀測的檢查點。
|
(C++26 起) |
目錄 |
[編輯] 引數
ch | - | - 要儲存在放置區的字元 |
[編輯] 返回值
Traits::not_eof(ch) 表示成功,或 Traits::eof() 表示失敗。
[編輯] 注意
如果 a_codecvt.always_noconv() 返回 true,則可能跳過對 a_codecvt.out() 的呼叫。
[編輯] 示例
本節不完整 原因:無示例 |
[編輯] 參閱
[virtual] |
從放置區向關聯輸出序列寫入字元 ( std::basic_streambuf<CharT,Traits> 的虛保護成員函式) |
[virtual] |
從關聯檔案讀取 (虛保護成員函式) |