为什么在这里都可以使用 istream、ostream、iostream 和 ios_base?

3
int main()
{
int a=0;
int b=0;
std::cout<<"Please enter an int: "<<std::endl;
std::cin>>a;
auto old_state =std::cin.rdstate(); // remember the current state of cin
std::cin.clear(); // make cin valid
std::cout<<"Please enter another int: "<<std::endl;
std::cin>>b;// use cin
auto new_state = std::cin.rdstate();
if(old_state==std::istream::failbit&&new_state==std::istream::failbit) 
//I tried std::ostream,std::iostream,ios_base they all work.
std::cout<<"Both are failbit!"<<std::endl;
}

我刚看到了C++ Primer上关于IO章节的内容。我尝试了这段代码,惊奇地发现在最后两行中,当我将std::istream更改为std::ostreamstd::iostreamstd::ios_base时,它们都能正常工作,只要我输入了两个char。请有人帮忙用简单的语言解释一下为什么会出现这种情况。非常感谢!


除非你需要它提供的所有额外功能,否则不要使用std::endl'\n'会开始一个新行。 - Pete Becker
@PeteBecker 哦,好的,我知道你的意思了。cin与cout绑定在一起,所以不需要endl来清除缓冲区。谢谢你指出这一点!:) - Des1gnWizard
1个回答

3
因为failbitios_base的一个public成员,而其他所有类都是通过public继承自ios_base

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接