public member function
<streambuf> <iostream>

std::streambuf::in_avail

streamsize in_avail();
获取可读取的字符数
返回可读取的字符数。此值取决于在get pointergptr)处是否有直接可用的读取位置。
  • 如果get pointergptr)有值且小于end pointeregptr):函数返回get pointerend pointer之间的直接可用的字符数(即,它返回 (egptr()-gptr()),而不调用任何虚成员函数)。
  • 如果get pointergptr)为 null 或已到达end pointeregptr):函数调用受保护的虚成员函数 showmanyc 来获取underflow后预期可用的字符数。

参数



返回值

可读取的字符数。
值为 -1(来自 showmanyc)表示没有预期会提供更多字符。
streamsize 是一个带符号整型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// get file buffer size using in_avail
#include <iostream>     // std::cout, std::streambuf, std::streamsize
#include <fstream>      // std::ifstream

int main () {
  std::ifstream ifs ("test.txt");
  if (ifs.good()) {
    std::streambuf* pbuf = ifs.rdbuf();
    char c; ifs >> c;
    std::streamsize size = pbuf->in_avail();
    std::cout << "first character in file: " << c << '\n';
    std::cout << size << " characters in buffer after it\n";
  }
  ifs.close();

  return 0;
}

数据竞争

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

异常安全

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

另见