Itu berasal dari sejarah menggunakan nilai integer sebagai boolean.
Jika x
adalah int
, tetapi saya menggunakannya sebagai boolean karena if(x)...
peningkatan itu berarti bahwa apa pun nilai kebenarannya sebelum operasi, itu akan memiliki nilai kebenarantrue
setelahnya (kecuali overflow).
Namun, tidak mungkin untuk memprediksi hasil dari --
pengetahuan yang diberikan hanya dari nilai kebenaran x
, karena dapat menghasilkan false
(jika nilai integral adalah 1) atau true
(jika nilai integral adalah yang lain - terutama ini termasuk 0 [ false
] dan 2 atau lebih [true
]).
Jadi sebagai tangan pendek ++
bekerja, dan--
tidak.
++
diizinkan pada bools untuk kompatibilitas dengan ini, tetapi penggunaannya tidak digunakan lagi dalam standar.
Ini mengasumsikan bahwa saya hanya menggunakan x
sebagai boolean, yang berarti bahwa overflow tidak dapat terjadi sampai saya melakukannya ++
cukup sering untuk menyebabkan overflow itu sendiri. Bahkan dengan char sebagai tipe yang digunakan dan CHAR_BITS
sesuatu yang rendah seperti 5, itu 32 kali sebelum ini tidak berfungsi lagi (itu masih cukup argumen karena itu adalah praktik yang buruk, saya tidak membela praktiknya, hanya menjelaskan mengapa itu berhasil) untuk 32-bit int
kami tentu saja harus menggunakan ++
2 ^ 32 kali sebelum ini menjadi masalah. Dengan --
meskipun itu hanya akan menghasilkan false
jika saya mulai dengan nilai 1 untuk true
, atau dimulai dengan 0 dan digunakan ++
tepat sekali sebelumnya.
Ini berbeda jika kita mulai dengan nilai yang hanya sedikit di bawah 0. Memang, dalam kasus seperti ini kita mungkin ingin ++
menghasilkan false
nilai pada akhirnya seperti:
int x = -5;
while(++x)
doSomething(x);
Namun, contoh ini diperlakukan x
sebagai di int
mana - mana kecuali bersyarat, jadi itu setara dengan:
int x = -5;
while(++x != 0)
doSomething(x);
Yang berbeda hanya menggunakan x
sebagai boolean.