std :: ostringstreamはどのようにboolに変換しますか?
-
08-07-2019 - |
質問
このコードを偶然見つけました。
std::ostringstream str;
/// (some usage)
assert( ! str );
ostringstream
は、 bool
コンテキストで使用した場合に何を意味しますか?
これはコンパイルと実行で起こる誤った使用法でしょうか?
解決
ストリームが現在有効かどうかを示します。これは、すべてのストリームでできることです。たとえば、ファイルが適切に開かれなかった場合、ファイルストリームは無効になります。
補足として、この機能(boolとしてストリームをテストする)は、C ++ 11以降で explicit operator bool
をオーバーロードし、 void *
C ++ 11より前のバージョンの キャスト演算子。
理由の例を含むリンクストリームが失敗する可能性があります。これは文字列ストリームに固有のものではありませんが、文字列ストリームには適用されます。
編集: Martin Yorkが私の間違いを指摘した後、 bool
を void *
に変更しました。
他のヒント
式は有効であり、ストリームの状態を評価します。この機能は、入力ストリームでより一般的に使用されます。
istringstream is;
is.str( "foo" );
int x;
is >> x;
if ( ! is ) {
cerr << "Conversion failed";
}
標準のストリーミング関数がostringstreamをどのように悪化させるかはわかりませんが、自分で作成することはできます。
所属していません StackOverflow