std::basic_ios<CharT,Traits>:: operator bool
|
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.
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
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:
| 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 |