Tamsayı değerlerini boole olarak kullanma geçmişinden gelir.
Eğer bir xise int, ancak bunu bir boole olarak kullanıyorum, o if(x)...zaman artırma, işlemden önceki doğruluk değeri ne olursa olsun, ondan truesonra bir doğruluk değerine sahip olacağı anlamına gelecektir (taşma hariç).
Ancak, sonucunu tahmin etmek imkansız --, sadece gerçeği değerinin verilen bilginin xo yol açabilir olarak, false(integral değeri 1 ise) veya true(entegral değer başka bir şey ise - özellikle bu içermektedir 0 [ false] ve 2 ya da daha [ true]).
Yani kısa bir el ++çalıştı ve --çalışmadı.
++ bununla uyumluluk için bool'larda izin verilir, ancak kullanımı standartta kullanımdan kaldırılmıştır.
Bu, yalnızcax bir boole olarak kullandığımı varsayar , yani ++kendi başına bir taşmaya neden olacak kadar sık yapana kadar taşma gerçekleşemez. Kullanılan tür olarak char ve CHAR_BITS5 gibi düşük bir şey olsa bile , bunun işe yaramaması için 32 kat önce (bu hala kötü bir uygulama olması için yeterli bir argüman, uygulamayı savunmuyorum, sadece neden işe yaradığını açıklıyorum) 32 bit intiçin, ++bu bir sorun haline gelmeden önce elbette 2 ^ 32 kez kullanmamız gerekir . Bununla --birlikte, yalnızca false1 değeriyle başlasam trueveya 0 ile başlasam ve ++daha önce tam olarak bir kez kullanılırsam sonuçlanacaktır .
Bu, 0'ın sadece birkaç altında bir değerle başlarsak farklıdır. Aslında, böyle bir durumda ++, falsesonuçta aşağıdaki gibi bir değerle sonuçlanmak isteyebiliriz :
int x = -5;
while(++x)
doSomething(x);
Bununla birlikte, bu örnek , koşullu hariç her yerde kabul xedilir int, dolayısıyla şuna eşdeğerdir:
int x = -5;
while(++x != 0)
doSomething(x);
Yalnızca xboole olarak kullanmaktan farklı olan .