2009-05-07 14 views
3

Ich bin über diesen Code gestolpert.Wie würde std :: ostringstream in bool konvertieren?

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

Was bedeutet ostringstream signify wenn sie in einem bool Kontext verwendet?

Ist das möglicherweise eine falsche Verwendung, die passiert, um zu kompilieren und auszuführen?

Antwort

10

Es teilt Ihnen mit, ob der Stream aktuell gültig ist. Das können alle Streams tun. Ein Dateistream kann beispielsweise ungültig sein, wenn die Datei nicht ordnungsgemäß geöffnet wurde.

Als Randbemerkung, diese Funktionalität (ein Strom als bool Prüfung) wird durch Überlastung explicit operator boolin C++ 11 und erreicht später und indem der void* Umwandlungsoperator in Versionen Überlastung vor C++ 11.

Hier ist ein Link mit some examples of why a stream might fail. Dies ist nicht spezifisch für String-Streams, aber es gilt für sie.

Bearbeiten: geändert bool zu void* nach Martin York wies auf meinen Fehler.

+4

Tatsächlich wird dies durch Überladen des Void * Cast-Operators erreicht. WENN der Bool-Cast-Operator verwendet wurde, könnte der Stream in einem arithmetischen Kontext verwendet werden, und der Compiler würde in boolears arbeiten und den Wert 0/1 verwenden. Ein void * kann andererseits nicht in einem arithmetischen Kontext verwendet werden, sondern kann in einem bool-Kontext verwendet werden, wenn NULL-Zeiger als falsch ausgewertet werden. Aber in diesem Fall der Betreiber! wird verwendet, um einen bool-Wert explizit zurückzugeben. –

+0

Guter Punkt. Das ist es, was ich aus dem Gedächtnis bekomme. ;) – Naaff

+0

Was würde das speziell für einen ostringstream bedeuten? Vielleicht nicht mehr im Speicher? –

1

Der Ausdruck ist gültig und wertet den Status des Streams aus. Diese Funktion wird häufig auch auf den Eingangsströmen verwendet:

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

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

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

Verwandte Themen