std::basic_istream<CharT,Traits>::unget - cppreference.com
来自cppreference.com
令最近提取的字符再次可用。
首先清除 eofbit,然后表现为无格式输入函数 (UnformattedInputFunction) 。构造并检查 sentry 对象后,若设置了任何 ios_base::iostate 标志,则函数设置 failbit 并返回。否则,调用 rdbuf()->sungetc()。
若 rdbuf()->sungetc() 返回 Traits::eof(),则调用 setstate(badbit)。
任何情况下,设置 gcount() 计数器为零。
参数
(无)
返回值
*this
异常
在出现错误(错误状态标志不是 goodbit)并且 exceptions() 已设置为对该状态抛出时,会抛出 failure。
如果内部操作抛出了异常,那么捕获它并设置 badbit。如果 exceptions() 设置了 badbit,那么就会重抛该异常。
示例
#include <iostream> #include <sstream> int main() { std::istringstream s1("Hello, world."); char c1 = s1.get(); if (s1.unget()) { char c2 = s1.get(); std::cout << "Got: '" << c1 << "'. Got again: '" << c2 << "'.\n"; } }
输出:
Got: 'H'. Got again: 'H'.
缺陷报告
下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。
| 缺陷报告 | 应用于 | 出版时的行为 | 正确行为 |
|---|---|---|---|
| LWG 1328 (N3168) |
C++98 | unget 不清除 eofbit
|
做其他任何事之前清除 eofbit
|