#include <iostream>
int main( )
{
   using namespace std;
   cout << cin.rdbuf()->in_avail() << endl;
   cin.putback(1);
   cin.putback(1);
   cout << cin.rdbuf()->in_avail() << endl;
   return 0;
} //compile by g++-4.8.1

我认为这将输出0和2

但是当我运行代码时,它输出0和0,为什么呢?

或者如果我更改cin.putback(1);诠释cin >> a;输入12 12;

它仍然输出0和0

最佳答案

必须发生的是,您的putbackstreambuf获取区域中未找到与std::cin相关的任何空间(否则,读取位置将可用,而egptr() - gptr()将为非零值),并且必须由于以下原因进入了底层pbackfail
in_avail()将调用showmanyc(),并且返回零(这是该虚拟函数的默认实现)是安全的,因为这意味着读取可能会阻塞并且可能会失败,但不能保证两者都执行。显然,在这种情况下,实现可以为showmanyc()提供更有用的实现,但是简单的实现既便宜又符合要求。

关于c++ - 为什么即使流中有一些char,in_avail()也输出零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17474252/

10-15 05:48