2009-05-07 4 views

答えて

10

ストリームが現在有効かどうかを示します。これはすべてのストリームができることです。たとえば、ファイルが正しく開かれていないと、ファイルストリームが無効になる可能性があります。サイドノートとして

、この機能(ブール値としてストリームをテスト)はC++ 11以降とバージョンC++ 11前void*キャスト演算子をオーバーロードすることによってでexplicit operator boolをオーバーロードすることによって達成されます。

ここにはsome examples of why a stream might failを含むリンクがあります。これは文字列ストリームに固有のものではありませんが、文字列ストリームにも当てはまります。

編集:boolvoid*マーティンヨークが私の間違いを指摘した後。

+4

実際には、これはvoid *キャスト演算子のオーバーロードによって実現されます。 boolキャスト演算子が使用された場合、ストリームは算術コンテキストで使用され、コンパイラはboolにキャストして値0/1を使用します。一方、void *は算術コンテキストでは使用できませんが、NULLポインタがfalseと評価されるため、boolコンテキストで使用できます。しかし、この場合、演算子!明示的にbool値を返すために使用されます。 –

+0

良い点。それは私が記憶から行くために得るものです。 ;) – Naaff

+0

川流域に特有のものは何でしょうか?おそらくメモリが不足していますか? –

1

この式は有効で、ストリームの状態を評価します。

istringstream is; 
is.str("foo"); 
int x; 
is >> x; 

if (! is) { 
    cerr << "Conversion failed"; 
} 

私は、標準のストリーミング機能のいずれかがostringstreamが悪く行くことを引き起こす可能性があるかどうかはわかりませんが、あなたは確かに1を自分で書くことができます:この機能は、より一般的に、入力ストリーム上で使用されています。

関連する問題