Es stammt aus der Geschichte der Verwendung von Ganzzahlwerten als Boolesche Werte.
Wenn dies ein xist 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 truedanach 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 xals 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_BITSetwas 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 intmüssten wir natürlich ++2 ^ 32 mal verwenden, bevor dies ein Problem ist. Mit --obwohl wird es nur ergeben, falsewenn ich mit einem Wert von 1 für trueoder 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 falseWert schließlich wie folgt erhalten :
int x = -5;
while(++x)
doSomething(x);
Doch dieses Beispiel behandelt xals 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 xals Boolescher Wert unterscheidet.