Es stammt aus der Geschichte der Verwendung von Ganzzahlwerten als Boolesche Werte.
Wenn dies ein x
ist int
, aber ich es als Booleschen if(x)...
Wert gemäß gemäß Inkrementierung verwende, bedeutet dies, dass unabhängig von seinem Wahrheitswert vor der Operation ein Wahrheitswert von true
danach vorliegt (außer bei Überlauf).
Es ist jedoch unmöglich, das Ergebnis des --
gegebenen Wissens nur über den Wahrheitswert von vorherzusagen x
, da dies zu false
(wenn der Integralwert 1 ist) oder true
(wenn der Integralwert etwas anderes ist - insbesondere zu 0 [ false
] und 2 oder mehr [ true
]).
Also als Short-Hand ++
gearbeitet und --
nicht.
++
ist auf Bools aus Kompatibilitätsgründen zulässig, seine Verwendung ist jedoch im Standard veraltet.
Dies setzt voraus , dass ich nur verwenden x
als boolean, dass Überlauf bedeutet , kann nicht passieren , bis ich getan habe ++
oft genug , um einen Überlauf zu verursachen , auf seine eigene ist. Selbst mit char als verwendetem Typ und CHAR_BITS
etwas Niedrigem wie 5 ist das 32 Mal, bevor dies nicht mehr funktioniert (das ist immer noch ein Argument genug, um eine schlechte Praxis zu sein, ich verteidige die Praxis nicht, sondern erkläre nur, warum sie funktioniert). Für ein 32-Bit int
müssten wir natürlich ++
2 ^ 32 mal verwenden, bevor dies ein Problem ist. Mit --
obwohl wird es nur ergeben, false
wenn ich mit einem Wert von 1 für true
oder mit 0 angefangen und ++
genau einmal zuvor verwendet habe.
Dies ist anders, wenn wir mit einem Wert beginnen, der nur wenige unter 0 liegt. In einem solchen Fall möchten wir möglicherweise ++
den false
Wert schließlich wie folgt erhalten :
int x = -5;
while(++x)
doSomething(x);
Doch dieses Beispiel behandelt x
als int
überall mit Ausnahme der Bedingung, so ist es gleichbedeutend mit:
int x = -5;
while(++x != 0)
doSomething(x);
Was sich von der Verwendung nur x
als Boolescher Wert unterscheidet.