public member function
<streambuf> <iostream>

std::basic_streambuf::in_avail

streamsize in_avail();
获取可读字符数
返回可读字符数。此值取决于是否有可用的读取位置,这由*读取指针*(gptr)决定。
  • 如果*读取指针*(gptr)有值且小于*结束指针*(egptr):该函数返回*读取指针*到*结束指针*之间直接可用的字符数(即,它返回 (egptr()-gptr()),而无需调用任何虚成员函数)。
  • 如果*读取指针*(gptr)为 null 或已达到*结束指针*(egptr):该函数调用受保护的虚成员函数 showmanyc 来获取*下溢*(underflow)后预期的可用字符数。

参数



返回值

可读字符数。
值为-1(由showmanyc获得)表示不再预期有任何字符可用。
streamsize 是一个带符号整型。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// get file size using pubseekoff
#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;
}

数据竞争

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

异常安全

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

另见