ฉันเรียนรู้เกี่ยวกับการดำเนินงานมากใน C ++ และผมเห็นว่า==
และ!=
เป็นเพียงบางฟังก์ชั่นพิเศษที่สามารถปรับแต่งสำหรับประเภทที่ผู้ใช้กำหนด แม้ว่าข้อกังวลของฉันคือทำไมต้องมีคำจำกัดความแยกจากกันสองประการ ผมคิดว่าถ้าa == b
เป็นจริงแล้วa != b
เป็นเท็จโดยอัตโนมัติและในทางกลับกันและไม่มีความเป็นไปได้อื่น ๆ เพราะโดยความหมายคือa != b
!(a == b)
และฉันไม่สามารถจินตนาการถึงสถานการณ์ที่สิ่งนี้ไม่เป็นความจริง แต่บางทีจินตนาการของฉันมี จำกัด หรือฉันไม่รู้อะไรเลย?
ฉันรู้ว่าฉันสามารถกำหนดหนึ่งในแง่ของอื่น ๆ แต่นี่ไม่ใช่สิ่งที่ฉันถามเกี่ยวกับ ฉันยังไม่ได้ถามถึงความแตกต่างระหว่างการเปรียบเทียบวัตถุด้วยมูลค่าหรือเอกลักษณ์ หรือว่าวัตถุสองรายการอาจเท่ากันและไม่เท่ากันในเวลาเดียวกัน (นี่ไม่ใช่ตัวเลือกแน่นอน! สิ่งเหล่านี้เป็นสิ่งที่ไม่เกิดร่วมกัน) สิ่งที่ฉันถามคือ:
มีสถานการณ์ใดบ้างที่เป็นไปได้ที่การถามคำถามเกี่ยวกับวัตถุสองชิ้นที่เท่ากันนั้นสมเหตุสมผล แต่การถามเกี่ยวกับวัตถุที่ไม่เท่ากันนั้นไม่สมเหตุสมผล (จากมุมมองของผู้ใช้หรือมุมมองของผู้ใช้)
หากไม่มีความเป็นไปได้เช่นนั้นเหตุใด C ++ ในโลกจึงให้ผู้ให้บริการสองรายนี้ถูกกำหนดให้เป็นฟังก์ชั่นที่แตกต่างกันสองรายการ
'undefined' != expression
เป็นจริงเสมอ (หรือเท็จหรือไม่ได้กำหนด) โดยไม่คำนึงถึงว่าสามารถประเมินการแสดงออก ในกรณีนี้a!=b
จะส่งคืนผลลัพธ์ที่ถูกต้องตามคำนิยาม แต่!(a==b)
จะล้มเหลวหากb
ไม่สามารถประเมินได้ (หรือใช้เวลามากในการประเมินb
ราคาแพง)
(NaN != NaN) == true