Ja. Für ganzzahlige Typen, !
gibt true
, wenn der Operand gleich Null ist, und false
anders.
Also !b
hier bedeutet nur b == 0
.
Dies ist ein besonderer Fall, in dem ein Wert in ein bool
umgewandelt wird. Die !b
kann als !((bool)b)
betrachtet werden, so ist die Frage, was die „truthness“ von b
ist. In C++, arithmetisch Typen, Zeigertypen und ENUM können bool
umgewandelt werden. Wenn der Wert 0 oder null ist, ist das Ergebnis false
, sonst ist es true
(C++ §4.1.2).
Natürlich benutzerdefinierten Klassen können sogar überlasten die operator!
oder operator
< Typen umwandeln können in bool> die !b
für ihre Klassen zu ermöglichen. Zum Beispiel hat std::stream
die operator!
und operator void*
zur Überprüfung der failbit überlastet, so dass Idiome wie
while (std::cin >> x) { // <-- conversion to bool needed here
...
verwendet werden.
(Aber Ihr Code !(a > b && b <= c) || a > c && !b
ist nur kryptisch.)
Dies ist kryptischer Code, nicht leicht zu lesen, mit sinnlosen Namen für Variablen. 'd =! (a> b && b <= c) || a > c && !b;' Bitte, sauber programmieren: Wählen Sie gute Namen, und multiplizieren Sie nicht mehrere Operationen in einer Zeile. –
@Stephane: "Jemand hat mir das gezeigt." Wenn der Fragesteller nicht den Code schreiben, wie sie Ihre Anweisungen auszuführen? wie es passiert, nur die '! b' auf die Frage relevant ist, so dass der Rest fallen gelassen werden könnte, aber da der Fragesteller die' versteht nicht! 'Betreiber, könnte dies nicht offensichtlich sein –
@Steve.Okay, aber ich bin so oft auf diese Variablennamen gestoßen ... –