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.


  • Mod

    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 Typ bool in einen Integer konvertiert, dann wird der Wert true zu 1 und der Wert false zu 0 . Das ist in etwa das was bei deiner ersten Ausgabe passiert.
    2. Wenn man einen Integer in einen bool konvertiert, dann erhält man false , falls der Integer den Wert 0 hat, ansonsten erhält man true . Das entspricht deiner zweiten Beobachtung.
    Anmerkung: Das if() führt zu einer implizierten Konvertierung des Integers in einen bool .
    Weitere Anmerkung: Und ja, was SeppJ sagt ist wichtig: bool ist ein eigenständiger Typ, der nur die Werte true und false haben kann. Von und zu Integer-Werten findet immer eine Konvertierung statt.



  • std::cout << std::boolalpha << true << false


Log in to reply