Saya belajar tentang kelebihan operator di C ++, dan saya melihat itu ==
dan !=
hanya beberapa fungsi khusus yang dapat dikustomisasi untuk tipe yang ditentukan pengguna. Kekhawatiran saya adalah, mengapa ada dua definisi terpisah yang dibutuhkan? Saya berpikir bahwa jika a == b
benar, maka a != b
secara otomatis salah, dan sebaliknya, dan tidak ada kemungkinan lain, karena, menurut definisi, a != b
adalah !(a == b)
. Dan saya tidak bisa membayangkan situasi di mana ini tidak benar. Tapi mungkin imajinasiku terbatas atau aku tidak tahu sesuatu?
Saya tahu bahwa saya dapat mendefinisikan satu dalam hal yang lain, tetapi ini bukan yang saya tanyakan. Saya juga tidak bertanya tentang perbedaan antara membandingkan objek berdasarkan nilai atau identitas. Atau apakah dua objek bisa sama dan tidak sama pada saat yang sama (ini jelas bukan pilihan! Hal-hal ini saling eksklusif). Yang saya tanyakan adalah ini:
Apakah ada situasi yang memungkinkan di mana mengajukan pertanyaan tentang dua objek yang sama itu masuk akal, tetapi bertanya tentang mereka yang tidak sama tidak masuk akal? (baik dari perspektif pengguna, atau perspektif pelaksana)
Jika tidak ada kemungkinan seperti itu, lalu mengapa di Bumi apakah C ++ memiliki dua operator yang didefinisikan sebagai dua fungsi yang berbeda?
'undefined' != expression
selalu benar (atau salah, atau tidak terdefinisi), terlepas dari apakah ekspresi dapat dievaluasi. Dalam hal ini a!=b
akan mengembalikan hasil yang benar sesuai definisi, tetapi !(a==b)
akan gagal jika b
tidak dapat dievaluasi. (Atau butuh banyak waktu jika evaluasi b
itu mahal).
(NaN != NaN) == true