私はこのコードを見つけました。std :: ostringstreamはどのようにしてboolに変換されますか?
std::ostringstream str;
/// (some usage)
assert(! str);
bool
文脈で使用された場合ostringstream
は何を意味するのでしょうか?
これは、コンパイルと実行の間違った使用法ですか?
私はこのコードを見つけました。std :: ostringstreamはどのようにしてboolに変換されますか?
std::ostringstream str;
/// (some usage)
assert(! str);
bool
文脈で使用された場合ostringstream
は何を意味するのでしょうか?
これは、コンパイルと実行の間違った使用法ですか?
ストリームが現在有効かどうかを示します。これはすべてのストリームができることです。たとえば、ファイルが正しく開かれていないと、ファイルストリームが無効になる可能性があります。サイドノートとして
、この機能(ブール値としてストリームをテスト)はC++ 11以降とバージョンC++ 11前でvoid*
キャスト演算子をオーバーロードすることによってでexplicit operator bool
をオーバーロードすることによって達成されます。
ここにはsome examples of why a stream might failを含むリンクがあります。これは文字列ストリームに固有のものではありませんが、文字列ストリームにも当てはまります。
編集:bool
〜void*
マーティンヨークが私の間違いを指摘した後。
この式は有効で、ストリームの状態を評価します。
istringstream is;
is.str("foo");
int x;
is >> x;
if (! is) {
cerr << "Conversion failed";
}
私は、標準のストリーミング機能のいずれかがostringstreamが悪く行くことを引き起こす可能性があるかどうかはわかりませんが、あなたは確かに1を自分で書くことができます:この機能は、より一般的に、入力ストリーム上で使用されています。
実際には、これはvoid *キャスト演算子のオーバーロードによって実現されます。 boolキャスト演算子が使用された場合、ストリームは算術コンテキストで使用され、コンパイラはboolにキャストして値0/1を使用します。一方、void *は算術コンテキストでは使用できませんが、NULLポインタがfalseと評価されるため、boolコンテキストで使用できます。しかし、この場合、演算子!明示的にbool値を返すために使用されます。 –
良い点。それは私が記憶から行くために得るものです。 ;) – Naaff
川流域に特有のものは何でしょうか?おそらくメモリが不足していますか? –