std::basic_istream<CharT,Traits>::putback
来自 cppreference.cn
< cpp | io | basic istream
basic_istream& putback( char_type ch ); |
||
将字符 ch 放回输入流,以便下一次提取的字符将是 ch。
首先清除 eofbit
,然后行为类似于 UnformattedInputFunction。在构造并检查哨兵对象之后,如果 rdbuf() 不为空,则调用 rdbuf()->sputbackc(ch),如果 ch 不等于最近提取的字符,则调用 rdbuf()->pbackfail(ch)。
如果 rdbuf()
为空或 rdbuf->sputbackc(ch) 返回 Traits::eof(),则调用 setstate(badbit)。
在任何情况下,将 gcount()
计数器设置为零。
目录 |
[编辑] 参数
ch | - | 要放入输入流的字符 |
[编辑] 返回值
*this
[编辑] 异常
如果内部操作抛出异常,则捕获该异常并设置 badbit。如果 exceptions() 设置为针对 badbit
抛出异常,则重新抛出该异常。
[编辑] 示例
演示修改和非修改 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++ 标准。
缺陷报告 | 应用于 | 发布时的行为 | 正确的行为 |
---|---|---|---|
LWG 2243 | C++98 | 调用 sputbackc() 时没有参数 |
用 ch 调用 |
[编辑] 另请参阅
将一个字符放回输入序列 ( std::basic_streambuf<CharT,Traits> 的公共成员函数) | |
取消提取字符 (公共成员函数) | |
读取下一个字符而不提取它 (公共成员函数) |