#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
最佳答案
必须发生的是,您的putback
在streambuf
获取区域中未找到与std::cin
相关的任何空间(否则,读取位置将可用,而egptr() - gptr()
将为非零值),并且必须由于以下原因进入了底层pbackfail
。in_avail()
将调用showmanyc()
,并且返回零(这是该虚拟函数的默认实现)是安全的,因为这意味着读取可能会阻塞并且可能会失败,但不能保证两者都执行。显然,在这种情况下,实现可以为showmanyc()
提供更有用的实现,但是简单的实现既便宜又符合要求。
关于c++ - 为什么即使流中有一些char,in_avail()也输出零?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17474252/