std::basic_istream<CharT,Traits>::putback
来自 cppreference.cn
< cpp | io | basic istream
basic_istream& putback( char_type ch ); |
||
将字符 ch 放回输入流,以便下一个提取的字符将是 ch。
首先清除 eofbit
,然后表现为 UnformattedInputFunction。在构造和检查 sentry 对象之后,如果 rdbuf() 不为空,则调用 rdbuf()->sputbackc(ch),这将调用 rdbuf()->pbackfail(ch) 如果 ch 不等于最近提取的字符。
如果 rdbuf()
为空,或者如果 rdbuf->sputbackc(ch) 返回 Traits::eof(),则调用 setstate(badbit)。
在任何情况下,都将 gcount()
计数器设置为零。
目录 |
[编辑] 参数
ch | - | 要放入输入流的字符 |
[编辑] 返回值
*this
[编辑] 异常
如果内部操作抛出异常,则会捕获该异常并设置 badbit。如果为 badbit
设置了 exceptions(),则会重新抛出该异常。
[编辑] 示例
演示修改和非修改 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 调用 |
[编辑] 参见
将一个字符放回输入序列中 ( std::basic_streambuf<CharT,Traits> 的公共成员函数) | |
撤销提取一个字符 (公共成员函数) | |
读取下一个字符但不提取它 (公共成员函数) |