Namespaces
Variants

std::basic_ios<CharT,Traits>:: operator bool

From cppreference.net
operator /* unspecified-boolean-type */ ( ) const ;
(1) (bis C++11)
explicit operator bool ( ) const ;
(2) (seit C++11)

Prüft, ob der Stream keine Fehler aufweist.

1) Gibt einen Wert zurück, der in einem booleschen Kontext zu false ausgewertet wird, falls fail ( ) true zurückgibt, andernfalls gibt es einen Wert zurück, der in einem booleschen Kontext zu true ausgewertet wird.
2) Gibt true zurück, wenn der Stream keine Fehler hat und für E/A-Operationen bereit ist. Konkret gibt ! fail ( ) zurück.

Dieser Operator ermöglicht es, Streams und Funktionen, die Referenzen auf Streams zurückgeben, als Schleifenbedingungen zu verwenden, was zu den idiomatischen C++ Eingabeschleifen führt, wie while ( stream >> value ) { ... } oder while ( std:: getline ( stream, string ) ) { ... } . Solche Schleifen führen den Schleifenkörper nur aus, wenn die Eingabeoperation erfolgreich war.

Inhaltsverzeichnis

Parameter

(keine)

Rückgabewert

1) Ein Wert, der in einem booleschen Kontext zu true ausgewertet wird, wenn der Stream keine Fehler hat, andernfalls ein Wert, der in einem booleschen Kontext zu false ausgewertet wird.
2) true wenn der Stream keine Fehler hat, false andernfalls.

Hinweise

Diese Konvertierung kann in Kontexten verwendet werden, in denen ein bool erwartet wird (z.B. eine if-Bedingung ). Allerdings sind implizite Konvertierungen (z.B. zu int ), die mit bool auftreten können, nicht erlaubt.

In C++98, operator bool konnte nicht direkt bereitgestellt werden aufgrund von dem Safe Bool Problem . Die ursprüngliche Lösung in C++98 ist die Bereitstellung von operator void * , der einen Nullzeiger zurückgibt, wenn fail ( ) true zurückgibt, oder einen nicht-Null-Zeiger andernfalls. Es wurde ersetzt durch die Lösung von LWG Issue 468 , die die Anwendung des Safe Bool Idioms ermöglicht.

Seit C++11 können Konvertierungsfunktionen explicit sein. Die Lösung von LWG Issue 1094 führte den expliziten operator bool ein, und die boolesche Konvertierung ist nun sicher.

Beispiel

#include <iostream>
#include <sstream>
int main()
{
    std::istringstream s("1 2 3 error");
    int n;
    std::cout << std::boolalpha << "s is " << static_cast<bool>(s) << '\n';
    while (s >> n)
        std::cout << n << '\n';
    std::cout << "s is " << static_cast<bool>(s) << '\n';
}

Ausgabe:

s is true
1
2
3
s is false

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 468 C++98 operator void * war vorhanden eine Konvertierungsfunktion zu einem nicht näher spezifizierten booleschen Typ wird stattdessen bereitgestellt

Siehe auch

Die folgende Tabelle zeigt die Werte der basic_ios Accessoren ( good() , fail() , etc.) für alle möglichen Kombinationen der ios_base::iostate Flags:

**Hinweis:** Da alle zu übersetzenden Texte innerhalb von ` `, ` ` oder `
` Tags stehen und gemäß den Anweisungen nicht übersetzt werden sollen, bleibt der gesamte Inhalt unverändert. Die C++-spezifischen Begriffe (eofbit, failbit, badbit, good(), fail(), bad(), eof(), operator bool, operator!) werden nicht übersetzt, um die technische Präzision zu wahren.
ios_base::iostate Flags basic_ios Accessoren
eofbit failbit badbit good() fail() bad() eof() operator bool operator!
false false false true false false false true false
false false true false true true false false true
false true false false true false false false true
falsch wahr wahr falsch wahr wahr falsch falsch wahr
wahr falsch falsch falsch falsch falsch wahr wahr falsch
wahr falsch wahr falsch wahr wahr wahr falsch wahr
wahr wahr falsch falsch wahr falsch wahr falsch wahr
wahr wahr wahr falsch wahr wahr wahr falsch wahr