मैं सी ++ में ऑपरेटर ओवरलोडिंग के बारे में सीख रहा हूं, और मैं इसे देखता हूं ==
और !=
बस कुछ विशेष फ़ंक्शन हैं जो उपयोगकर्ता-परिभाषित प्रकारों के लिए अनुकूलित किए जा सकते हैं। हालांकि मेरी चिंता यह है कि दो अलग-अलग परिभाषाओं की आवश्यकता क्यों है? मैंने सोचा कि अगर a == b
यह सच है, तोa != b
स्वचालित रूप से गलत है, और इसके विपरीत, और कोई अन्य संभावना नहीं है, क्योंकि परिभाषा के अनुसार, a != b
यह है !(a == b)
। और मैं किसी भी स्थिति की कल्पना नहीं कर सकता जिसमें यह सच नहीं था। लेकिन शायद मेरी कल्पना सीमित है या मैं किसी चीज़ से अनभिज्ञ हूँ?
मुझे पता है कि मैं एक को दूसरे के संदर्भ में परिभाषित कर सकता हूं, लेकिन यह वह नहीं है जिसके बारे में मैं पूछ रहा हूं। मैं मूल्य या पहचान से वस्तुओं की तुलना करने के बीच के अंतर के बारे में भी नहीं पूछ रहा हूं। या क्या एक ही समय में दो वस्तुएं समान और गैर-बराबर हो सकती हैं (यह निश्चित रूप से एक विकल्प नहीं है! ये चीजें परस्पर अनन्य हैं)। मैं इसके बारे में क्या पूछ रहा हूं:
क्या ऐसी कोई स्थिति संभव है, जिसमें दो वस्तुओं के बराबर होने के बारे में सवाल पूछना मायने रखता है, लेकिन उनके बारे में नहीं पूछ रहा है बराबर होने के मतलब नहीं है? (या तो उपयोगकर्ता के दृष्टिकोण से, या कार्यान्वयनकर्ता के दृष्टिकोण से)
यदि ऐसी कोई संभावना नहीं है, तो पृथ्वी पर C ++ में इन दो ऑपरेटरों को दो अलग-अलग कार्यों के रूप में परिभाषित क्यों किया जाता है?
'undefined' != expression
हमेशा सही (या गलत, या अपरिभाषित) होता है, चाहे अभिव्यक्ति का मूल्यांकन किया जाए। इस मामले में a!=b
परिभाषा के अनुसार सही परिणाम लौटाएगा, लेकिन मूल्यांकन नहीं किया जा सकता !(a==b)
तो विफल b
हो जाएगा। (या मूल्यांकन b
महंगा है तो बहुत समय लें )।
(NaN != NaN) == true