दोनों मेरी compilers (छ ++ और बजना) इस संकलन नहीं होगा:असमानता के लिए वैक्टर की तुलना वेक्टर तत्वों पर केवल समानता ऑपरेटर का उपयोग करें। क्यूं कर?
#include <vector>
struct A {
friend bool operator!=(A const& a1, A const& a2) { return false; }
};
int main()
{
std::vector<A> v1, v2;
return (v1 != v2);
}
त्रुटि जा रहा है कि stl_algobase.h में कहीं !(*__first1 == *__first2)
अमान्य है।
दूसरे शब्दों में, यह मौजूदा ऑपरेटर को पूरी तरह अनदेखा कर रहा है! = A
का। यह कहने की जरूरत नहीं है कि अगर मैं operator==
परिभाषित करता हूं तो यह संकलित करता है और काम करता है।
क्या यह मानक के अनुसार होना चाहिए?
यदि हां, तो क्यों?
op == और op! = के लिए ओवरलोड स्वतंत्र हैं, और कोई भी स्वचालित रूप से परिभाषित नहीं किया जाएगा। मानक-लाइब्रेरी-लेखकों ने केवल उनमें से एक का उपयोग करने के लिए समझदार निर्णय लिया, और उपयोगकर्ताओं के लिए इसके संदर्भ में अन्य प्रदान किया। मानक कंटेनर पर – Deduplicator
'ए! = बी''! (ए == बी) 'के बराबर निर्दिष्ट है, और' a == b' को 'std :: बराबर (a.begin(), ए के रूप में निर्दिष्ट किया गया है। अंत(), b.begin(), b.end()) ', जो तुलना के लिए' ==' का उपयोग करने के लिए निर्दिष्ट है। –