Frage

ich auf diesen Code gestolpert.

    std::ostringstream str;
    /// (some usage)
    assert( ! str );

Was bedeutet ostringstream bedeuten, wenn in einem bool Kontext verwendet?

Ist dies möglicherweise eine falsche Verwendung, die kompilieren und ausführen passiert?

War es hilfreich?

Lösung

Es sagt Ihnen, wenn der Strom zur Zeit gültig ist. Dies ist etwas, das alle Ströme tun. Ein Datei-Stream, zum Beispiel, kann ungültig sein, wenn die Datei nicht ordnungsgemäß geöffnet wurde.

Als Randnotiz, diese Funktionalität (einen Strom als Bool Prüfung) durch Überlastung explicit operator bool in C ++ 11 erreicht und später und durch die void* Cast-Operator Überlastung in Versionen vor C ++ 11 .

Hier ist ein Link enthalten, einige Beispiele dafür, warum ein Strom könnte scheitern. Dies ist auf String-Streams nicht spezifisch, sondern es ihnen gilt.

Edit:. geändert bool void* nach Martin Yorker mein Fehler hingewiesen

Andere Tipps

Der Ausdruck ist gültig und wertet den Zustand des Stroms. Diese Funktion wird häufiger auf Eingabestrom verwendet:

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

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

Ich bin mir nicht sicher, wie eine der Standard-Streaming-Funktionen könnte ein Ostringstream führen gehen schlecht, aber man kann sicher selbst eine Beurteilung schreiben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top