为什么 istream、ostream、iostream、ios_base 都在这里工作
why istream,ostream,iostream,ios_base all work here
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::ostream
,std::iostream
,std::ios_base
,当我输入的时候,它们似乎都有效在两个 char
中。请有人帮助用简单的语言解释为什么会发生这种情况。非常感谢!
因为 failbit
是 ios_base
的 public
成员,而所有其他 类 public
都继承自 ios_base
。
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::ostream
,std::iostream
,std::ios_base
,当我输入的时候,它们似乎都有效在两个 char
中。请有人帮助用简单的语言解释为什么会发生这种情况。非常感谢!
因为 failbit
是 ios_base
的 public
成员,而所有其他 类 public
都继承自 ios_base
。