มาจากประวัติของการใช้ค่าจำนวนเต็มเป็นบูลีน
ถ้าxเป็น an intแต่ฉันกำลังใช้มันเป็นบูลีนตามการif(x)...เพิ่มขึ้นจะหมายความว่าค่าความจริงใด ๆ ก็ตามก่อนการดำเนินการมันจะมีค่าความจริงตามtrueหลัง (ยกเว้นการล้น)
อย่างไรก็ตามเป็นไปไม่ได้ที่จะทำนายผลลัพธ์ของ--ความรู้ที่กำหนดให้เป็นค่าความจริงxเท่านั้นเนื่องจากอาจทำให้เกิดfalse(ถ้าค่าอินทิกรัลเป็น 1) หรือtrue(ถ้าค่าอินทิกรัลเป็นอย่างอื่นโดยเฉพาะอย่างยิ่งซึ่งรวมถึง 0 [ false] และ 2 หรือ เพิ่มเติม [ true])
เช่นเดียวกับมือสั้น++ทำงานและ--ไม่ได้ผล
++ ได้รับอนุญาตในบูลเพื่อให้เข้ากันได้กับสิ่งนี้ แต่การใช้งานถูกเลิกใช้ในมาตรฐานและถูกลบออกใน C ++ 17
นี้อนุมานว่าฉันเพียงใช้xเป็นบูลีนความหมายล้นที่ไม่สามารถเกิดขึ้นจนกว่าฉันได้ทำ++บ่อยมากพอที่จะทำให้เกิดการล้นบนเป็นของตัวเอง แม้ว่าจะมี char เป็นประเภทที่ใช้และCHAR_BITSบางอย่างที่ต่ำเช่น 5 แต่ 32 เท่าก่อนหน้านี้ก็ไม่ได้ผลอีกต่อไป (นั่นยังคงมีข้อโต้แย้งเพียงพอสำหรับการปฏิบัติที่ไม่ดีฉันไม่ได้ปกป้องการฝึกฝนเพียงแค่อธิบายว่าเหตุใดจึงได้ผล) สำหรับ 32 บิตintเราจะต้องใช้++2 ^ 32 ครั้งก่อนที่จะเป็นปัญหา ด้วย--แม้ว่ามันจะส่งผลให้falseถ้าผมเริ่มด้วยค่าตัว 1 trueหรือเริ่มต้นด้วย 0 และใช้งาน++ได้อย่างแม่นยำอีกครั้งก่อน
สิ่งนี้จะแตกต่างกันถ้าเราเริ่มต้นด้วยค่าที่ต่ำกว่า 0 เพียงไม่กี่อันอันที่จริงในกรณีนี้เราอาจต้องการ ++ให้ผลลัพธ์เป็นfalseค่าในที่สุดเช่นใน:
int x = -5;
while(++x)
doSomething(x);
อย่างไรก็ตามตัวอย่างนี้ถือว่า xเป็นintทุกที่ยกเว้นเงื่อนไขดังนั้นจึงเทียบเท่ากับ:
int x = -5;
while(++x != 0)
doSomething(x);
ซึ่งแตกต่างกันเพียงการใช้xเป็นบูลีน