public member function
<istream> <iostream>

std::basic_istream::ignore

basic_istream& ignore (streamsize n = 1, int_type delim = traits_type::eof());
提取并丢弃字符
从输入序列中提取字符并丢弃它们,直到提取了 n 个字符,或者提取的字符与 delim 相同为止。

该函数还会在遇到文件尾(end-of-file)时停止提取字符。如果在提取 n 个字符或找到 delim 之前就遇到了文件尾,该函数会将 eofbit 标志设置为置位状态。

内部,该函数通过首先构造一个 sentry 对象(将 noskipws 设置为 true)来访问输入序列。然后(如果 good),它会像调用其成员函数 sbumpcsgetc 一样,从其关联的流缓冲区对象中提取字符,最后销毁 sentry 对象后返回。

参数

n
要提取(并忽略)的最大字符数。
如果这个值正好是 numeric_limits<streamsize>::max(),则没有限制:将尽可能多地提取字符,直到找到 delim(或文件尾)。
streamsize 是一个带符号整型。
delim
分隔符字符:该函数将在提取的字符与此字符(使用 traits_type::eq)比较相等时停止提取字符。
如果此值为文件尾值(traits_type::eof()),则没有字符会与其比较相等,因此将精确丢弃 n 个字符(除非该函数失败或遇到文件尾)。
成员类型 int_type 是一个整数类型,能够表示任何有效的字符值或特殊的文件尾值。

返回值

*thisbasic_istream 对象。

错误通过修改内部状态标志来通知
flagerror
eofbit函数停止提取字符,因为输入序列没有更多可用字符(已到达 文件末尾)。
failbit构造 sentry 失败(例如,当调用前的 *流状态* 不是 good 时)。
badbit流错误(例如,当此函数捕获由内部操作抛出的异常时)。
当此标志被设置时,流的完整性可能已受到影响。
一次操作可能设置多个标志。

如果操作设置了一个已向成员 exceptions 注册的内部状态标志,则该函数会抛出一个成员类型为 failure 的异常。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// istream::ignore example
#include <iostream>     // std::cin, std::cout

int main () {
  char first, last;

  std::cout << "Please, enter your first name followed by your surname: ";

  first = std::cin.get();     // get one character
  std::cin.ignore(256,' ');   // ignore until space

  last = std::cin.get();      // get one character

  std::cout << "Your initials are " << first << last << '\n';

  return 0;
}

可能的输出
Please, enter your first name followed by your surname: John Smith
Your initials are JS


数据竞争

修改流对象。
对同一流对象的并发访问可能导致数据竞争,标准流对象 cinwcin 在与 stdio 同步(synchronized with stdio)时除外(在这种情况下,不会发生数据竞争,尽管提取的字符分配给哪个线程没有保证)。

异常安全

基本保证:如果抛出异常,对象处于有效状态。
如果导致的操作设置了一个错误状态标志,该标志不是 goodbit,并且成员 exceptions 被设置为对此状态抛出异常,则该函数会抛出成员类型为 failure 的异常。
内部操作抛出的任何异常都会被捕获并由该函数处理,将 badbit 设置为置位状态。如果在对 exceptions 的最后一次调用中设置了 badbit,则该函数会重新抛出捕获的异常。

另见