public member function
<istream> <iostream>

std::istream::unget

istream& unget();
Put back character
尝试将流的当前位置减少一个字符,使从流中提取的最后一个字符再次可供提取操作使用。

Internally, the function accesses the input sequence by first constructing a sentry object (with noskipws set to true). Then (if good), it calls sungetc on its associated stream buffer object (if any). Finally, it destroys the sentry object before returning.

如果在调用之前设置了 eofbit 标志,则函数失败(设置 failbit 并返回)。
该函数会清除在调用之前设置的 eofbit 标志。

If the call to sungetc fails, the function sets the badbit flag. Note that this may happen even if the function is called right after a character has been extracted from the stream (depending on the internals of the associated stream buffer object).

调用此函数会将gcount的返回值设置为零。

参数



返回值

istream 对象 (*this)。

错误通过修改 *内部状态标志* 来发出信号。
flagerror
eofbit-
failbit构造sentry失败(例如,当流状态在调用之前不是good时)。
badbitEither the internal call to sungetc failed, or another error occurred on the stream (such as when the function catches an exception thrown by an internal operation, or when no stream buffer is associated with the stream).
When set, the integrity of the stream may have been affected.
Multiple flags may be set by a single operation.

If the operation sets an internal state flag that was registered with member exceptions, the function throws an exception of member type failure.

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// istream::unget example
#include <iostream>     // std::cin, std::cout
#include <string>       // std::string

int main () {
  std::cout << "Please, enter a number or a word: ";
  char c = std::cin.get();

  if ( (c >= '0') && (c <= '9') )
  {
    int n;
    std::cin.unget();
    std::cin >> n;
    std::cout << "You entered a number: " << n << '\n';
  }
  else
  {
    std::string str;
    std::cin.unget();
    getline (std::cin,str);
    std::cout << "You entered a word: " << str << '\n';
  }
  return 0;
}

可能的输出
Please, enter a number or a word: 7791
You entered a number: 7791


数据竞争

修改流对象。
并发访问同一个流对象可能导致数据争用。

异常安全

基本保证:如果抛出异常,对象处于有效状态。
It throws an exception of member type failure if the resulting error state flag is not goodbit and member exceptions was set to throw for that state.
Any exception thrown by an internal operation is caught and handled by the function, setting badbit. If badbit was set on the last call to exceptions, the function rethrows the caught exception.

另见