Kann ich das nicht Operator in C ++ auf int Werte verwenden?
-
29-09-2019 - |
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;
}
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