optional
और variant
के बारे में एक सतत बहस है, विशेष रूप से असाइनमेंट के संबंध में संदर्भ प्रकारों के साथ करना चाहिए। मैं इस मुद्दे के आसपास बहस को बेहतर ढंग से समझना चाहता हूं। तर्क से बचने और अभी भी हम कार्यक्षमता के सबसे देने के लिए -वैकल्पिक <T&> असाइनमेंट पर पुनर्विचार क्यों करना चाहिए?
optional<T&> opt;
opt = i;
opt = j; // should this rebind or do i=j?
वर्तमान में, निर्णय optional<T&>
बीमार का गठन कर सकते हैं और variant::operator=
बीमार का गठन करता है, तो प्रकारों में से किसी एक संदर्भ प्रकार है बनाने के लिए है।
क्या तर्क है कि opt = j
अंतर्निहित संदर्भ को पुनर्जीवित करना चाहिए?
template <class T>
struct optional<T&> {
T* ptr = nullptr;
optional& operator=(T& rhs) {
ptr = &rhs;
return *this;
}
};
ठीक है, आपके उदाहरण में, यदि 'opt = i' संदर्भ को बाध्य करता है और फिर' opt = j' संदर्भ के माध्यम से असाइन करता है, तो क्या यह अजीब महसूस नहीं करेगा? –
आप असाइनमेंट का उपयोग करके सामान्य संदर्भों को शायद ही सीमित कर सकते हैं। –
विशेष रूप से अजीब अगर 'ऑप्ट' फ़ंक्शन पैरामीटर के रूप में आया, और यह रनटाइम पर निर्भर करता है कि 'opt = i;' –