名稱空間
變體
操作

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 [xbufxbuf_end) 中的字元輸出到檔案,如果輸出失敗則失敗。此時,如果 pbase() != pptr()pbase() == end 都為 true(這意味著 xbuf 不足以容納一個外部字元),則增加 XSIZE 並從頭開始重複。
std::codecvt_base::partial [xbufxbuf_end) 中已轉換的外部字元輸出到檔案,並使用 [endpptr()) 中剩餘未轉換的內部字元重複。如果輸出失敗,則失敗(不重複)。
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]
從關聯檔案讀取
(虛保護成員函式) [編輯]