我的问题是如何
while(cin>>x)
{
//code
}
工作。更具体地说,该代码如何终止循环?
从文档here看来,>>运算符将返回
&istream
。这是否意味着如果读取失败或到达文件末尾,它不仅会设置eofbit,failbit或badbit,而且会返回null?那真的没有道理,所以我怀疑就是这样。是否对eofbit进行某种隐式检查?
我问是因为我希望用2个这样的类来实现类似的东西,
class B
{
//variables and methods
}
class A
{
//Variables and methods
//Container of B objects. ex. B[] or vector<B> or Map<key,B>
&A >> (B b);
}
int main()
{
A a;
B b;
while( a >> b)
{
//Code
}
}
注意:我不希望从
istream
继承,除非它是使这项工作神奇的地方。原因是我希望将类及其依赖项保持尽可能小。如果我从istream
继承,我将收到其所有公共(public)和 protected 东西,并且我不会尝试创建类似istream
的对象。我只想复制一张,非常好。编辑:我正在使用Visual Studio 2010(这真是很痛苦),并且我需要与C++ 03 + C++ 11的实现兼容的东西。
最佳答案
像这样:
// UNTESTED
class B
{
//variables and methods
}
class A
{
bool still_good;
//Variables and methods
//Container of B objects. ex. B[] or vector<B> or Map<key,B>
A& operator>>(B& b) {
try_to_fill_b();
if(fail) still_good = false;
return *this;
}
explicit operator bool() { return still_good; }
}
int main()
{
A a;
B b;
while( a >> b)
{
//Code
}
}
关于C++ While(cin >> x)如何工作?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12923762/