Itu berasal dari sejarah menggunakan nilai integer sebagai boolean.
Jika xadalah 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 xsebagai 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_BITSsesuatu 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 intkami tentu saja harus menggunakan ++2 ^ 32 kali sebelum ini menjadi masalah. Dengan --meskipun itu hanya akan menghasilkan falsejika 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 falsenilai pada akhirnya seperti:
int x = -5;
while(++x)
doSomething(x);
Namun, contoh ini diperlakukan xsebagai di intmana - mana kecuali bersyarat, jadi itu setara dengan:
int x = -5;
while(++x != 0)
doSomething(x);
Yang berbeda hanya menggunakan xsebagai boolean.