std::basic_istream<CharT,Traits>::putback
來自 cppreference.com
< cpp | io | basic istream
basic_istream& putback( char_type ch ); |
||
將字元 ch 放回輸入流,以便下一次提取的字元將是 ch。
首先清除 eofbit
,然後行為類似於 UnformattedInputFunction。在構造並檢查哨兵物件之後,如果 rdbuf() 不為空,則呼叫 rdbuf()->sputbackc(ch),如果 ch 不等於最近提取的字元,則呼叫 rdbuf()->pbackfail(ch)。
如果 rdbuf()
為空或 rdbuf->sputbackc(ch) 返回 Traits::eof(),則呼叫 setstate(badbit)。
在任何情況下,將 gcount()
計數器設定為零。
目錄 |
[編輯] 引數
ch | - | 要放入輸入流的字元 |
[編輯] 返回值
*this
[編輯] 異常
如果內部操作丟擲異常,則捕獲該異常並設定 badbit。如果 exceptions() 設定為針對 badbit
丟擲異常,則重新丟擲該異常。
[編輯] 示例
演示修改和非修改 putback()
之間的區別。
執行此程式碼
#include <iostream> #include <sstream> int main() { std::stringstream s1("Hello, world"); // IO stream s1.get(); if (s1.putback('Y')) // modifies the buffer std::cout << s1.rdbuf() << '\n'; else std::cout << "putback failed\n"; std::cout << "--\n"; std::istringstream s2("Hello, world"); // input-only stream s2.get(); if (s2.putback('Y')) // cannot modify input-only buffer std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; s2.clear(); std::cout << "--\n"; if (s2.putback('H')) // non-modifying putback std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; }
輸出
Yello, world -- putback failed -- Hello, world
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2243 | C++98 | 呼叫 sputbackc() 時沒有引數 |
用 ch 呼叫 |
[編輯] 另請參閱
將一個字元放回輸入序列 ( std::basic_streambuf<CharT,Traits> 的公共成員函式) | |
取消提取字元 (公共成員函式) | |
讀取下一個字元而不提取它 (公共成員函式) |