ในสมัยก่อนของ C ไม่มีประเภทบูลีน ผู้คนใช้int
สำหรับการจัดเก็บข้อมูลบูลีนและใช้งานได้เป็นส่วนใหญ่ ซีโร่นั้นผิดและทุกอย่างก็เป็นจริง
สิ่งนี้หมายความว่าถ้าคุณทำint flag = 0;
และหลังจากนั้นflag++
ค่านี้จะเป็นจริง สิ่งนี้จะใช้งานได้ไม่ว่าค่าของธงคืออะไร(เว้นแต่ว่าคุณจะทำมันมากมันจะกลิ้งไปมาและคุณกลับมาที่ศูนย์ แต่ให้เพิกเฉยต่อสิ่งนั้น) - เพิ่มค่าสถานะเมื่อค่าของมันคือ 1 จะให้ 2 ซึ่งยังคง จริง
บางคนใช้สิ่งนี้โดยไม่มีเงื่อนไขในการตั้งค่าบูลีนเป็นจริง ฉันไม่แน่ใจว่ามันจะกลายเป็นสำนวนแต่ในบางรหัส
สิ่งนี้ไม่เคยได้ผล--
เพราะถ้าค่าเป็นอย่างอื่นที่ไม่ใช่ 1 (ซึ่งอาจเป็นได้) ค่านั้นก็จะไม่ผิด และถ้ามันเป็นเท็จ ( 0
) และคุณทำโอเปอเรเตอร์ลดค่าลงมันจะไม่เป็นเท็จ
เมื่อย้ายรหัสจาก C ถึง C ++ ในช่วงแรกมันสำคัญมากที่รหัส C ที่รวมอยู่ใน C ++ ยังคงสามารถใช้งานได้ ดังนั้นในข้อกำหนดสำหรับ C ++ (ส่วน 5.2.6 (หน้า 71)) จะอ่าน:
ค่าที่ได้รับจากการใช้ postfix ++ คือค่าที่ตัวถูกดำเนินการมีก่อนใช้ตัวดำเนินการ [หมายเหตุ: ค่าที่ได้รับคือสำเนาของค่าดั้งเดิม] ตัวถูกดำเนินการจะเป็นค่า lvalue ที่สามารถแก้ไขได้ ประเภทของตัวถูกดำเนินการจะต้องเป็นประเภทเลขคณิตหรือตัวชี้ไปยังประเภทวัตถุที่สมบูรณ์ หลังจากสังเกตผลลัพธ์แล้วค่าของวัตถุนั้นจะถูกปรับเปลี่ยนโดยการเพิ่ม 1 ลงไปยกเว้นว่าวัตถุนั้นเป็นชนิดbool
ซึ่งในกรณีนั้นจะถูกตั้งค่าเป็นจริง [หมายเหตุ: การใช้งานนี้เลิกใช้แล้วโปรดดูภาคผนวกง]
ตัวถูกดำเนินการของ postfix - เป็น decremented analogously ไปกับ Postfix ++ bool
ผู้ประกอบการยกเว้นว่าถูกดำเนินการจะต้องไม่เป็นชนิด
สิ่งนี้ถูกกล่าวถึงอีกครั้งในส่วน 5.3.2 (สำหรับตัวดำเนินการส่วนนำหน้า - 5.2.6 ใช้กับ postfix)
อย่างที่คุณเห็นสิ่งนี้เลิกใช้แล้ว (ภาคผนวก D ในเอกสารหน้า 709) และไม่ควรใช้
แต่นั่นเป็นเหตุผล และบางครั้งคุณอาจเห็นรหัส แต่อย่าทำ