Frage zu file stream Fehlerüberprüfung

  • Themenstarter Themenstarter C152778
  • Beginndatum Beginndatum
C

C152778

Hallo,

oft lese ich folgenden Code, um zu überprüfen, ob ein filestream Objekt die Datei korrekt geöffnet hat:
Code:
fstream s;
.. // Öffnen der Datei
if( !s )
.. // Fehlerbehandlung

Ich nehme an, dass s den Wert 0 hat, falls die Datei nicht korrekt geöffnet wurde, was dem boolschen Wert false entspricht.
Was ich nicht verstehe ist, was _genau_ hinter dem Aufruf s steckt?
Gebe ich z.b. eine integer Variable int i = 4; einfach an mit i, dann erhält man an dieser Stelle den Wert 4. Bei einem Objekt einer Klasse kann es doch aber viele Felder geben, welches wird ausgegeben, wenn man das Objekt angibt wie hier beim if ?

Schöne Grüße, Cyraid
 
Ich nehme an, dass s den Wert 0 hat, falls die Datei nicht korrekt geöffnet wurde, was dem boolschen Wert false entspricht.
Was ich nicht verstehe ist, was _genau_ hinter dem Aufruf s steckt?
Du rufst hier den überladenen !-Operator auf. Dieser gibt im Fehlerfall true zurück, ansonsten false. s hat hier also keineswegs den Wert 0.

Gebe ich z.b. eine integer Variable int i = 4; einfach an mit i, dann erhält man an dieser Stelle den Wert 4. Bei einem Objekt einer Klasse kann es doch aber viele Felder geben, welches wird ausgegeben, wenn man das Objekt angibt wie hier beim if ?
Wenn der Compiler einen Ausdrück eines bestimmten Typs erwartet (hier ein bool), aber ein Ausdruck eines anderen Typs gegeben ist, wird versucht eine entsprechende Typumwandlung vorzunehmen (implizites Casting). Die POD-Typen können nahezu beliebig ineinander umgewandelt werden, bei Klassen muss man hingegen den Typcast-Operator überladen. Streams können zum Beispiel in Zeiger umgewandelt werden, da der operator void* auf ihnen definiert ist. Dieser würde aufgerufen werden, wenn du if (s) { … } geschrieben hättest.

Grüße,
Matthias
 
@Matthias: Vielen Dank für die ausführliche Antwort ! :) Jetzt ist es mir klar.
 
Zurück