名前空間
変種
操作

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

From cppreference.com
< cpp‎ | io‎ | basic istream
 
 
 
 
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()カウンターをゼロに設定します。

目次

[編集] パラメータ

文字 - 入力ストリームに入れる文字

[編集] 戻り値

*this

[編集] 例外

failure: エラーが発生した場合(エラー状態フラグが goodbit ではない)で、exceptions() がその状態に対してスローするように設定されている場合。

内部操作が例外をスローした場合、それはキャッチされ、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> の public メンバ関数) [編集]
文字を非抽出する (un-extract)
(public member function) [編集]
次の文字を抽出せずに読み取る
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)