Wie würden std :: ostringstream convert in bool?
-
08-07-2019 - |
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?
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
Referenz: ostringstream :: operator void * () und ostringstream :: operator! () .
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.