Frage

Seltsame Frage, aber jemand hat mir gezeigt, dieses, Ich frage mich, kann man die nicht benutzen! Operator für int in C ++? (Sein seltsam für mich).

#include <iostream>
using namespace std;

int main()
{
   int a=5, b=4, c=4, d;
   d = !( a > b && b <= c) || a > c && !b;
   cout << d;
   system ("pause");
   return 0;
}
War es hilfreich?

Lösung

Ja. Für ganzzahlige Typen, ! true kehrt, wenn der Operand gleich Null ist, und false sonst.

So !b hier nur bedeutet b == 0.


Dies ist ein besonderer Fall, in dem ein Wert in einem 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 benutzerdefinierte Klassen können sogar die operator! oder operator Überlastung << em> können Typen sein Konvertit 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.)

Andere Tipps

Ursprünglich in C (auf der C ++ basiert) gibt es keinen Boolean-Typen. Stattdessen wurde der Wert „true“ auf einen beliebigen Wert ungleich Null und der Wert „false“ wurde alles, was auswertet auf Null zugeordnet. Dieses Verhalten existiert noch in C ++. Also für eine int x, die Ausdrücke !x bedeutet „x nicht wahr“, die „x nicht Nicht-Null“ ist, das heißt, es ist wahr, wenn x Null ist.

Sie können, !b entspricht (b == 0).

Der Test für int gilt für Nicht-Null-Werte und falsch für Null-Werte, also nicht nur wahr für Null-Werte und falsch für Nicht-Null-Werte.

Die Build-in ! Operator konvertiert ihr Argument zu bool. Die Norm legt, dass gibt es eine Umwandlung von einem beliebigen arithmetischen Typ (int, char, .... float, double ...) zu Bool . Wenn der Quellwert 0 ist das Ergebnis true, sonst ist es false

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top