Überladenen Typwandlungen von Exemplaren in C++
Der Wahrheitswert einer Ausgabestroms
Der Versuch zum Anlegen einer Datei kann auch scheitern (beispielsweise, wenn der gewünschte Dateiname nicht zulässig ist). Damit das Programm darauf reagieren kann, muß es ja irgendwie davon erfahren. Die Stromklassen ermöglichen es, zu erfahren, ob ein Strom „gescheitert“ ist, das heißt, ob der letzte Versuch mit dem diesem Strom etwas zu machen gescheitert ist.
Was passiert, wenn ein Objekt einer Klasse in den Typ »bool« gewandelt wird, wird von der Klasse des Objekts festgelegt.
Im Falle einer Standard-Stromklasse ergibt die Wandlung nach »bool« den Wert »false«, genau dann wenn die Stromklasse gescheitert ist. In diesem Fall ist sie auch nicht mehr verwendbar.
Das folgende Programm sollte daher »1« (für true ) ausgeben, wenn die Datei angelegt werden konnte und das Stromobjekt nun verwendbar ist.
main.cpp
#include <iostream>
#include <ostream>
#include <fstream>
#include <initializer_list>int main()
{ ::std::ofstream out{ "alpha" };
::std::cout << static_cast< bool >( out )<< '\n'; }::std::cout
1
main.cpp
#include <iostream>
#include <ostream>
#include <fstream>
#include <initializer_list>int main()
{ ::std::ofstream out{ "alpha/:\\*?" };
::std::cout << static_cast< bool >( out )<< '\n'; }::std::cout
0
(Die obigen Ausgaben »1« und »0« sind nur beispielhaft zu verstehen. Was die obigen Programm tatsächlich ausgeben, kann von der Ausführungsumgebung abhängen.)
- Normentwurf, Stand 2011*
- 27.5.5.4 basic_ios flags functions [iostate.flags]
- …
- explicit operator bool() const;
- Returns: false if failbit or badbit is set in rdstate().¹
¹Diese Zeile wurde hier etwas vereinfacht, das Zitat ist also nicht ganz wörtlich.