निम्न कोड संकलित नहीं करता है।
int a = 1, b = 2, c = 3;
int& arr[] = {a,b,c,8};
इस बारे में सी ++ मानक क्या कहता है?
मुझे पता है कि मैं एक वर्ग घोषित कर सकता हूं जिसमें एक संदर्भ होता है, फिर उस वर्ग की एक सरणी बनाएं, जैसा कि नीचे दिखाया गया है। लेकिन मैं वास्तव में जानना चाहता हूं कि उपरोक्त कोड क्यों संकलित नहीं करता है।
struct cintref
{
cintref(const int & ref) : ref(ref) {}
operator const int &() { return ref; }
private:
const int & ref;
void operator=(const cintref &);
};
int main()
{
int a=1,b=2,c=3;
//typedef const int & cintref;
cintref arr[] = {a,b,c,8};
}
संदर्भों की एक सरणी का अनुकरण करने के struct cintref
बजाय इसका उपयोग करना संभव है const int &
।
intlink value = 8;
काम करेगा। अगर आपको विश्वास नहीं है तो जाँच करें।
operator=
। संदर्भों को फिर से नहीं भेजा जा सकता है। क्या तुम सच में इस तरह के अर्थ विज्ञान चाहते हैं - हालांकि मैं व्यक्तिगत रूप से एक स्थिति है जिसमें वे व्यावहारिक रूप से उपयोगी हो नहीं पाया है - तो std::reference_wrapper
, जिस तरह से यह करने के लिए किया जाएगा के रूप में यह वास्तव में एक सूचक को संग्रहीत करता है लेकिन प्रदान करता है संदर्भ की तरह operator
है और करता reseating अनुमति देते हैं। लेकिन तब मैं सिर्फ एक पॉइंटर का उपयोग करूँगा!