std::basic_istream<CharT,Traits>::putback
来自cppreference.com
< cpp | io | basic istream
输入/输出库
std::basic_istream
全局对象 | ||||
成员函数 | ||||
(C++11)
|
||||
有格式输入 | ||||
无格式输入 | ||||
basic_istream::putback
|
||||
定位 | ||||
杂项 | ||||
(C++11)
|
||||
成员类 | ||||
非成员函数 | ||||
basic_istream& putback( char_type ch
);
|
||
回放字符 ch
到输入流,从使得下个释出的字符将为 ch
。
首先清除 eofbit
,然后表现为无格式输入函数 (UnformattedInputFunction)
。构造并检查 sentry 对象后,若 rdbuf()
非空,则调用 rdbuf()->sputbackc(ch) ,若 ch
不等于最近输出的字符,则它调用 rdbuf()->pbackfail(ch) 。
若 rdbuf()
为空或若 rdbuf->sputbackc(ch) 返回 Traits::eof() ,则调用 setstate(badbit) 。
任何情况下,设置 gcount()
计数器为零。
参数
ch | - | 要放入输入流的字符 |
返回值
*this
异常
如果内部操作抛出异常,那么捕获它并设置 badbit。如果对 badbit
设置了 exceptions(),那么就会重抛该异常。
示例
演示修改和非修改 putback() 间的差异
运行此代码
#include <sstream> #include <iostream> int main() { std::stringstream s1("Hello, world"); // IO 流 s1.get(); if (s1.putback('Y')) // 修改缓冲区 std::cout << s1.rdbuf() << '\n'; else std::cout << "putback failed\n"; std::istringstream s2("Hello, world"); // 仅输入流 s2.get(); if (s2.putback('Y')) // cannot modify input-only buffer std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; s2.clear(); if (s2.putback('H')) // 非修改回放 std::cout << s2.rdbuf() << '\n'; else std::cout << "putback failed\n"; }
输出:
Yello, world putback failed Hello, world
参阅
在输入序列中放回一个字符 ( std::basic_streambuf<CharT,Traits>
的公开成员函数) |
|
撤销上一个字符的提取 (公开成员函数) |
|
读取下一个字符,但不会提取它 (公开成员函数) |