Wie sind true und false in C++ deklariert?
-
Hallo Leute,
ich habe eine kleine Verständnisfrage: Wie sind true und false in C++ deklariert?Wenn ich zum Beispiel true und false mittels
cout << true << false;
ausgebe, kommt 10 raus. True wäre 1, false wäre 0. Logisch.
Aber dann gibt es noch das hier:
if(i) cout << "Irgendwas";
Die Ausgabe erfolgt hier dann, wenn i ungleich 0 ist.
Das hieße dann false=0, true!=0.Was ist denn jetzt richtig? Die Frage oben steht exakt so in einer Übungsaufgabe. Eigentlich ist das ja ganz einfach, aber mich verwirrt das irgendwie.
-
True ist true und false ist false. Basta. Wandelt man true in einen Integer um (was implizit geht), dann erhält man 1, wandelt man False in einen Integer um, erhält man 0. Umgekehrt (was ebenfalls implizit möglich ist) erhält man True für jeden Integer ungleich 0 und False für den Integer 0.
Nur weil bestimmte Typen implizit ineinander konvertierbar sind, sind sie nicht gleich. True und False sind Booleans, keine Integer, und haben daher auch keinen Integerwert.
-
Beide Beobachtungen widersprechen sich nicht. Der Standard sagt in etwa folgendes:
1. Wenn man eine Variable vom Typbool
in einen Integer konvertiert, dann wird der Werttrue
zu1
und der Wertfalse
zu0
. Das ist in etwa das was bei deiner ersten Ausgabe passiert.
2. Wenn man einen Integer in einenbool
konvertiert, dann erhält manfalse
, falls der Integer den Wert0
hat, ansonsten erhält mantrue
. Das entspricht deiner zweiten Beobachtung.
Anmerkung: Dasif()
führt zu einer implizierten Konvertierung des Integers in einenbool
.
Weitere Anmerkung: Und ja, was SeppJ sagt ist wichtig:bool
ist ein eigenständiger Typ, der nur die Wertetrue
undfalse
haben kann. Von und zu Integer-Werten findet immer eine Konvertierung statt.
-
std::cout << std::boolalpha << true << false