std::basic_istream<CharT,Traits>::putback
来自 cppreference.com
< 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
[编辑] 另请参阅
将一个字符放回输入序列 ( std::basic_streambuf<CharT,Traits> 的公共成员函数) | |
取消提取一个字符 (公共成员函数) | |
读取下一个字符而不提取它 (公共成员函数) |