我的问题是如何

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/

10-12 16:01