2010-01-28 7 views
8

Ich habe eine Klasse mit einem bool Datenelement, das nicht vom Konstruktor initialisiert wird. Wenn ich das tueDrucken eines nicht initialisierten bool mit cout (C++)

cout << x.myBoolDataMember; 

wo x ein Objekt dieser Klasse ist, in dem die bool nicht initialisiert wurde, erhalte ich manchmal eine Zufallszahl eher als 0 oder 1 (Ich verwende gcc.) Ist das Verhalten konform mit der Standard?

Antwort

10

Entspricht dieses Verhalten dem Standard?

Ja! Die Verwendung von Garbage-Werten (nicht initialisiert) in Ihrem Code ruft auf. Undefiniertes Verhalten

4

Ja. Eine nicht initialisierte Variable kann einen beliebigen Wert haben.

+0

Es ist schwierig, bei nicht definiertem Verhalten über Werte zu sprechen. 'bool' hat nur zwei mögliche Werte,' false' und 'true'. Die Tatsache, dass "cout << b" etwas anderes als "0" und "1" ausgibt, ist eine Konsequenz davon, dass das Verhalten nicht definiert ist, und nicht von "b" einen anderen "Wert" als "falsch" oder "wahr" hat. – avakar

+3

Wahr. Es könnte auch nichts drucken, 0,5, "blau", oder Rauch ausstrahlen – MSalters

+1

Sie könnten in eine Katze verwandeln. Dämonen könnten aus deiner Nase fliegen. –

0

Sobald "< <" -Operator das Bool nicht überprüft, ist dieses Verhalten korrekt.
Das Problem hier ist in der Bool selbst versteckt: Programm verwendet mehr als ein Bit, um die Bool zu speichern. Dies ist abhängig von der Implementierung. Manchmal kann nur ein Bit zum Speichern des Bool verwendet werden.
Manchmal mehr, und es ist so ein Fall.