public member function
<streambuf> <iostream>

std::basic_streambuf::snextc

int_type snextc();
前進到下一個位置並獲取字元
將受控輸入序列的當前位置推進到下一個字元,並返回該下一個字元。

請注意,雖然相似,但以下成員函式的行為有所不同
成員函式,逐個字元列印字串的內容描述
sgetc()返回當前位置的字元。
sbumpc()返回當前位置的字元,並將當前位置推進到下一個字元。
snextc()將當前位置推進到下一個字元,並返回該下一個字元。

在內部,該函式首先呼叫 sbumpc,如果該函式返回一個有效字元,則該函式接著呼叫 sgetc。這僅在某個時候,當“get pointer”(gptr)沒有可用讀取位置時,才會呼叫虛成員。

其行為等同於如下實現:
1
2
3
4
int_type snextc() {
  if ( sbumpc() == traits_type::eof() ) return traits_type::eof();
  else return sgetc();
}

引數



返回值

受控輸入序列的下一個位置的字元,使用成員 traits_type::to_int_type 轉換為 int_type 型別的值。
如果受控輸入序列中沒有更多字元可供讀取,則函式返回檔案結束值(traits_type::eof())。
成員型別int_type是能夠表示任何字元值或特殊*檔案結束*符的整型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// show file content - snextc() example
#include <iostream>     // std::cout, std::streambuf
#include <fstream>      // std::ifstream

int main () {

  std::ifstream istr ("test.txt");
  if (istr) {
    std::streambuf * pbuf = istr.rdbuf();
    do {
      char ch = pbuf->sgetc();
      std::cout << ch;
    } while ( pbuf->snextc() != std::streambuf::traits_type::eof() );
    istr.close();
  }
  return 0;
}

此示例顯示了檔案內容在螢幕上,使用了 sgetcsnextc 的組合來讀取輸入檔案。

資料競爭

修改*流緩衝區*物件。
同時訪問同一*流緩衝區*物件可能會導致資料競爭。

異常安全

基本保證:如果丟擲異常,則流緩衝區處於有效狀態(這也適用於標準派生類)。

無效引數會導致未定義行為

另見