std::basic_istream<CharT,Traits>:: putback
|
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
例外
内部操作が例外をスローした場合、それは捕捉され、
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>
の公開メンバ関数)
|
|
|
文字の抽出を取り消す
(公開メンバ関数) |
|
|
次の文字を抽出せずに読み取る
(公開メンバ関数) |