Ben C ++ operatör aşırı yükleme hakkında öğreniyorum ve bunu görüyorum ==
ve !=
sadece kullanıcı tanımlı türleri için özelleştirilebilir bazı özel fonksiyonlar vardır. Benim endişem, neden iki ayrı tanım gerekli? Ben eğer düşünülmektedir a == b
doğrudur, o zaman a != b
, tanımı gereği, çünkü tersi otomatik sahte ve yardımcısı olduğunu ve başka hiçbir olasılığı vardır a != b
olduğunu !(a == b)
. Bunun doğru olmadığı bir durum hayal edemedim. Ama belki de hayal gücüm sınırlı ya da bir şeyden habersizim?
Birini diğeri açısından tanımlayabileceğimi biliyorum, ama istediğim bu değil. Nesneleri değere veya kimliğe göre karşılaştırma arasındaki farkı da sormuyorum. Ya da iki nesnenin aynı anda eşit ve eşit olup olmayacağı (bu kesinlikle bir seçenek değildir! Bu şeyler birbirini dışlar). Sorduğum şey şu:
İki nesne hakkında eşit olmakla ilgili soru sormanın anlamlı olduğu, ancak eşit olmamalarını sormanın anlamlı olmadığı herhangi bir durum var mı ? (kullanıcının bakış açısından veya uygulayıcının bakış açısından)
Böyle bir olasılık yoksa, neden C ++ 'da bu iki işleç iki farklı işlev olarak tanımlanıyor?
'undefined' != expression
ifadenin değerlendirilip değerlendirilemeyeceğine bakılmaksızın, her zaman doğru (veya yanlış veya tanımsız) tanımlanabilir. Bu durumda a!=b
tanım gereği doğru sonucu döndürür, ancak değerlendirilemezse !(a==b)
başarısız olur b
. (Veya değerlendirme pahalıysa çok zaman ayırın b
).
(NaN != NaN) == true