0

私は私の読書でこのコードに出くわしました:

void assure(std::ifstream& infile ) {  
  if(!infile) { /* stuff */}
}

ifstream&関数の引数の型とを使用して好奇心をテストしたifstreamところ、うまくいくようです。条件式がどのように機能するのか興味がありました。これは NULL オブジェクトまたは空のオブジェクトの場合ですか? C++ オブジェクトを NULL にすることはできないと思いましたか?

機能するので!infile、失敗したifstreamオブジェクトはどのように表されますか?

その後の啓蒙に感謝します。

4

2 に答える 2

2

これはnegate operatorfail()を使用し、単純にチェックにフックされています。

good()EOF ( ) もチェックするため、の完全な反対ではありませんeofbit

(そして、はい、参照は常にオブジェクトを指します。質問は無意味です。ポインターのみが NULL になる可能性があります)。

于 2013-03-02T17:36:24.560 に答える
0

大きな違いはありません。どちらも非常によく似たコードで同じ動作になります。違いは、 の動作にeofあり、これはforgoodを返します。ただし、ほとんどの場合、これはほとんど違いがありません。ファイルの終わりを超えて読み取ろうとすると が状態に設定されるためです。これが起こらない場合もありますが、ほとんどの場合、それは同じこと。falseoperator!truefailbitfstream

于 2013-03-02T17:45:32.720 に答える