Namespaces
Variants

std::basic_istream<CharT,Traits>:: putback

From cppreference.net
basic_istream & putback ( char_type ch ) ;

文字 ch を入力ストリームに戻し、次に抽出される文字が ch になるようにします。

まず eofbit をクリアし、その後 UnformattedInputFunction として振る舞います。セントリオブジェクトを構築・チェックした後、 rdbuf() がnullでない場合、 rdbuf ( ) - > sputbackc ( ch ) を呼び出します。これは ch が直前に抽出された文字と等しくない場合、 rdbuf ( ) - > pbackfail ( ch ) を呼び出します。

rdbuf() がnullであるか、または rdbuf - > sputbackc ( ch ) Traits :: eof ( ) を返す場合、 setstate ( badbit ) を呼び出します。

いずれの場合も、 gcount() カウンタをゼロに設定します。

目次

パラメータ

ch - 入力ストリームに配置する文字

戻り値

* this

例外

failure (注:HTMLタグと属性は翻訳せず、テキスト「failure」はC++の専門用語であるため翻訳していません) if an error occurred (the error state flag is not goodbit ) and exceptions() is set to throw for that state.

内部操作が例外をスローした場合、それは捕捉され、 badbit が設定されます。 exceptions() badbit に対して設定されている場合、例外は再スローされます。

変更可能な putback() と変更不可能な 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++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2243 C++98 sputbackc() が引数なしで呼び出されていた ch を指定して呼び出す

関連項目

入力シーケンスに1文字を戻す
( std::basic_streambuf<CharT,Traits> の公開メンバ関数)
文字の抽出を取り消す
(公開メンバ関数)
次の文字を抽出せずに読み取る
(公開メンバ関数)