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

数据竞争

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

异常安全

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

无效参数会导致未定义行为

另见