Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | io‎ | basic ios
 
 
 
 
operator /* nicht spezifizierter boolescher Typ */() const;
(1) (bis C++11)
explicit operator bool() const;
(2) (seit C++11)

Prüft, ob der Stream fehlerfrei ist.

1) Gibt einen Wert zurück, der in einem booleschen Kontext zu false ausgewertet wird, wenn fail() true zurückgibt, andernfalls wird ein Wert zurückgegeben, der in einem booleschen Kontext zu true ausgewertet wird.
2) Gibt true zurück, wenn der Stream fehlerfrei ist und für E/A-Operationen bereit ist. Genauer gesagt wird !fail() zurückgegeben.

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

Inhalt

[bearbeiten] Parameter

(keine)

[bearbeiten] Rückgabewert

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

[bearbeiten] Hinweise

Diese Konvertierung kann in Kontexten verwendet werden, in denen ein bool erwartet wird (z. B. eine if-Bedingung). Implizite Konvertierungen (z. B. zu int), die bei bool auftreten können, sind jedoch nicht zulässig.

In C++98 konnte operator bool aufgrund von das sichere Bool-Problem nicht direkt bereitgestellt werden. Die anfä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-Nullzeiger andernfalls. Er wird durch die Lösung von LWG-Problem 468 ersetzt, das die Anwendung des Safe Bool Idioms ermöglicht.

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

[bearbeiten] 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

[bearbeiten] Fehlerberichte

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

DR angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 468 C++98 operator void* wurde bereitgestellt Stattdessen wird eine Konvertierungsfunktion zu einem nicht spezifizierten booleschen Typ bereitgestellt

[bearbeiten] Siehe auch

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

ios_base::iostate Flags basic_ios-Zugriffsfunktionen
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
false true true false true true false false true
true false false false false false true true false
true false true false true true true false true
true true false false true false true false true
true true true false true true true false true