มาจากประวัติของการใช้ค่าจำนวนเต็มเป็นบูลีน
ถ้า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
เป็นบูลีน