名稱空間
變體
操作

std::basic_stringbuf<CharT,Traits,Allocator>::pbackfail

來自 cppreference.com
< cpp‎ | io‎ | basic stringbuf
 
 
 
 
protected:
virtual int_type pbackfail( int_type c = Traits::eof() )

此受保護虛擬函式為公開函式 basic_streambuf::sungetcbasic_streambuf::sputbackc 所呼叫(而它們又為 basic_istream::ungetbasic_istream::putback 所呼叫)。

1) 呼叫方請求將獲取區回退一個字元(以無引數或以 Traits::eof() 為引數呼叫 pbackfail()
a) 首先,檢查是否有放回位置,而若確實沒有,則失敗。( stringbuf 沒有外部字元源可供重讀)
b) 若呼叫方弄錯而放回位置實際上可用,則簡單地自減 basic_streambuf::gptr(),例如透過呼叫 gbump(-1)
2) 呼叫方試圖放回與之前取得的字元不同的字元(以需要放回的字元為引數呼叫 pbackfail()),這種情況下
a) 首先,檢查是否有放回位置,而若沒有則失敗。
b) 然後檢查放回位置保有的是什麼字元。若該處保有的字元已經等於 c,由 Traits::eq(to_char_type(c), gptr()[-1]) 確定,則簡單地自減 basic_streambuf::gptr()
c) 否則,若緩衝區僅為讀而開啟,則失敗。
d) 否則,若緩衝區為寫而開啟(mode && std::ios_base::out 非零),則自減 basic_streambuf::gptr() 並寫入 c 到 gptr() 調整後所指向的位置。

目錄

[編輯] 引數

c - 要放回的字元,或指示請求回退獲取區的 Traits::eof()

[編輯] 返回值

成功時為 c,除非 c 曾是 Traits::eof(),該情況下返回 Traits::not_eof(c)

失敗時為 Traits::eof()

[編輯] 示例

[編輯] 參閱

將一個字元放回輸入序列,可能會修改輸入序列
(std::basic_streambuf<CharT,Traits> 的虛保護成員函式) [編輯]
將輸入序列中的下一個指標後退一個位置
(std::basic_streambuf<CharT,Traits> 的公開成員函式) [編輯]
將一個字元放回輸入序列
(std::basic_streambuf<CharT,Traits> 的公開成員函式) [編輯]
取消提取字元
(std::basic_istream<CharT,Traits> 的公開成員函式) [編輯]
將字元放入輸入流
(std::basic_istream<CharT,Traits> 的公開成員函式) [編輯]