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) |