मैं एक साधारण struct Wrapper
, दो टेम्प्लेटेड असाइनमेंट ऑपरेटर भार के द्वारा प्रतिष्ठित है:खाका असाइनमेंट ऑपरेटर ओवरलोडिंग रहस्य
Wrapper<float> a, b;
a = b;
b
a
को बताए का उपयोग करेगा:
template<typename T>
struct Wrapper {
Wrapper() {}
template <typename U>
Wrapper &operator=(const Wrapper<U> &rhs) {
cout << "1" << endl;
return *this;
}
template <typename U>
Wrapper &operator=(Wrapper<U> &rhs) {
cout << "2" << endl;
return *this;
}
};
मैं तो ए और बी की घोषणा उपरोक्त से गैर-कॉन्स्ट टेम्पलेटेड असाइनमेंट ऑपरेटर अधिभार, और संख्या "2" प्रदर्शित होती है।
यह क्या पहेली मुझे है: यदि मैं c
और d
,
Wrapper<float> c;
const Wrapper<float> d;
c = d;
घोषित करने और आवंटित d
c
को दो असाइनमेंट ऑपरेटर भार के न प्रयोग किया जाता है, और कोई उत्पादन प्रदर्शित होता है; तो डिफ़ॉल्ट प्रति असाइनमेंट ऑपरेटर लागू किया जाता है। d
से c
असाइन किए गए कॉन्स्ट अधिभारित असाइनमेंट ऑपरेटर का उपयोग क्यों नहीं करता है? या इसके बजाय, b
को a
डिफ़ॉल्ट प्रति असाइनमेंट ऑपरेटर का उपयोग क्यों करता है?
+1 * एक ऑपरेटर टेम्पलेट अंतर्निहित रूप से घोषित प्रति असाइनमेंट ऑपरेटर * की पीढ़ी को दबाने नहीं देता है। – Nawaz