Tamsayı değerlerini boole olarak kullanma geçmişinden gelir.
Eğer bir x
ise 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 true
sonra 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 x
o 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_BITS
5 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 int
için, ++
bu bir sorun haline gelmeden önce elbette 2 ^ 32 kez kullanmamız gerekir . Bununla --
birlikte, yalnızca false
1 değeriyle başlasam true
veya 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 ++
, false
sonuç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 x
edilir int
, dolayısıyla şuna eşdeğerdir:
int x = -5;
while(++x != 0)
doSomething(x);
Yalnızca x
boole olarak kullanmaktan farklı olan .