खोज…
एक संदर्भ परिभाषित करना
संदर्भ समान रूप से व्यवहार करते हैं, लेकिन पूरी तरह से कॉन्स्ट पॉइंटर्स की तरह नहीं। एक संदर्भ एक एम्परसेंड &
एक प्रकार के नाम पर प्रत्यय लगाकर परिभाषित किया गया है।
int i = 10;
int &refi = i;
यहाँ, refi
i
जुड़ा एक संदर्भ है।
संदर्भ संकेत के शब्दार्थ को सार करता है, अंतर्निहित वस्तु के लिए एक उपनाम की तरह कार्य करता है:
refi = 20; // i = 20;
आप एक ही परिभाषा में कई संदर्भों को भी परिभाषित कर सकते हैं:
int i = 10, j = 20;
int &refi = i, &refj = j;
// Common pitfall :
// int& refi = i, k = j;
// refi will be of type int&.
// though, k will be of type int, not int&!
परिभाषा के समय संदर्भों को सही ढंग से आरंभ किया जाना चाहिए, और बाद में संशोधित नहीं किया जा सकता है। कोड का निम्नलिखित टुकड़ा एक संकलन त्रुटि का कारण बनता है:
int &i; // error: declaration of reference variable 'i' requires an initializer
आप सीधे nullptr
के विपरीत, nullptr
लिए एक संदर्भ नहीं बांध सकते हैं:
int *const ptri = nullptr;
int &refi = nullptr; // error: non-const lvalue reference to type 'int' cannot bind to a temporary of type 'nullptr_t'
C ++ सन्दर्भ मौजूदा चरों के उपनाम हैं
C ++ में एक संदर्भ सिर्फ एक Alias
या एक चर का दूसरा नाम है। जैसे हम में से अधिकांश को हमारे पासपोर्ट नाम और निक नाम का उपयोग करके संदर्भित किया जा सकता है।
संदर्भ वस्तुतः मौजूद नहीं हैं और वे किसी भी स्मृति पर कब्जा नहीं करते हैं। अगर हम रेफरेंस वैरिएबल के एड्रेस को प्रिंट करते हैं तो वह वैसा ही एड्रेस प्रिंट करेगा, जैसा कि उसके रेफरेंस वेरिएबल का है।
int main() {
int i = 10;
int &j = i;
cout<<&i<<endl;
cout<<&b<<endl;
return 0;
}
उपरोक्त उदाहरण में, दोनों cout
समान पते को प्रिंट करेंगे। अगर हम किसी फंक्शन में रेफरेंस के तौर पर वैरिएबल लेते हैं तो स्थिति वैसी ही होगी
void func (int &fParam ) {
cout<<"Address inside function => "<<fParam<<endl;
}
int main() {
int i = 10;
cout<<"Address inside Main => "<<&i<<endl;
func(i);
return 0;
}
इस उदाहरण में भी, दोनों cout
समान पता cout
।
जैसा कि हम अब तक जानते हैं कि C++ References
सिर्फ उर्फ है, और एक उर्फ बनने के लिए, हमें कुछ ऐसा करने की आवश्यकता है जिसका उल्लेख अलियास कर सकता है।
यही कारण है कि इस तरह के बयान एक संकलक त्रुटि फेंक देंगे
int &i;
क्योंकि, उर्फ किसी बात का हवाला नहीं दे रहा है।