名稱空間
變體
操作

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

[編輯] 異常

如果發生錯誤(錯誤狀態標誌不是 goodbit)且 exceptions() 設定為針對該狀態丟擲異常,則丟擲 failure

如果內部操作丟擲異常,則捕獲該異常並設定 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> 的公共成員函式) [編輯]
取消提取字元
(公共成員函式) [編輯]
讀取下一個字元而不提取它
(公共成員函式) [編輯]