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,則該函式會重新丟擲捕獲的異常。

另見