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 的组合顺序读取输入文件。

数据竞争

修改*流缓冲区*对象。
同时访问同一*流缓冲区*对象可能会导致数据竞争。

异常安全

基本保证:如果抛出异常,则流缓冲区处于有效状态(这也适用于标准派生类)。

另见