8

私の質問は、どのように、

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を作成しようとはしていません。本当に素敵な一枚istreamをコピーしたいだけです。

編集:私はVisual Studio 2010を使用しています(これは本当に苦痛になりつつあります)。C++03 +いくつかのC++11の実装と互換性のあるものが必要になります。

4

2 に答える 2

5

ここのドキュメントから、>>演算子は&istreamを返すように見えます。これは、読み取りが失敗したり、ファイルの終わりに達した場合に、eofbit、failbit、またはbadbitを設定するだけでなく、nullを返すことを意味しますか?

いいえ、ストリームオブジェクトへの参照が返されますが、内部フラグが設定されます。これらのフラグをテストした後、以降のへの呼び出しoperator>>は失敗します。

eofbitのある種の暗黙のチェックはありますか?

質問が何であるかわからない。ストリームは、次の要求が失敗するかどうかを事前に検出しようとはしませんが、EOFにヒットしたために1つの操作が失敗した場合にのみフラグを設定します。を呼び出すたびにoperator>>、最初にストリームの状態がテストされ、ストリームの状態が良好な場合にのみ続行されます。

どのように機能しwhile(cin>>x)ますか?

ストリームオブジェクトからブール値への暗黙の変換があります。trueストリームが良好な状態であるかどうかにかかわらず、変換が行われfalseます。

于 2012-10-16T21:40:14.570 に答える
4

上記のものでそれを行う方法の例を書いていただけますか?

このような:

// 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
   }

}
于 2012-10-16T21:44:37.783 に答える