public member function
<streambuf> <iostream>

std::basic_streambuf::sbumpc

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

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

在內部,如果get指標gptr)沒有可用的讀取位置,則函式會呼叫虛保護成員 uflow。否則,函式直接使用get指標gptr),而不呼叫虛成員函式。

其行為等同於如下實現:
1
2
3
4
5
int_type sbumpc() {
  if ( (!gptr()) || (gptr()==egptr()) ) return uflow();
  gbump(1);
  return traits_type::to_int_type(gptr()[-1]);
}

返回值

呼叫前,受控輸入序列當前位置的字元,使用成員 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 - sbumpc() 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();
    while ( pbuf->sgetc() != std::streambuf::traits_type::eof() )
    {
      char ch = pbuf->sbumpc();
      std::cout << ch;
    }
    istr.close();
  }
  return 0;
}

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

資料競爭

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

異常安全

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

另見