質問

このコードを偶然見つけました。

    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をどのように悪化させるかはわかりませんが、自分で作成することはできます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top