public member function
<streambuf> <iostream>

std::streambuf::sbumpc

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

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

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

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

返回值

呼叫前受控輸入序列當前位置的字元,以int型別的值返回。
如果受控輸入序列中沒有更多字元可供讀取,則函式返回檔案結束值(EOF)。

示例

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

int main () {
  std::ifstream istr ("test.txt");
  if (istr) {
    std::streambuf * pbuf = istr.rdbuf();
    while ( pbuf->sgetc() != EOF )
    {
      char ch = pbuf->sbumpc();
      std::cout << ch;
    }
    istr.close();
  }
  return 0;
}

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

資料競爭

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

異常安全

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

另見