C में हम किसी एक्सप्रेशन के लेफ्ट हैंड साइड पर फंक्शन नाम का उपयोग नहीं कर सकते। C++ में हम इसे इस तरह उपयोग कर सकते हैं। यह कुछ फंक्शन द्वारा किया जा सकता है जो रेफरेंस वेरिएबल लौटाता है।
एक C++ फंक्शन पॉइंटर लौटाने के समान तरीके से रेफरेंस लौटा सकता है।
जब कोई फंक्शन रेफरेंस लौटाता है, तो यह अपने रिटर्न मान का एक अंतर्निहित पॉइंटर लौटाता है। इस तरह, एक फंक्शन का उपयोग असाइनमेंट स्टेटमेंट के बाईं ओर किया जा सकता है। उदाहरण के लिए, इस सरल प्रोग्राम पर विचार करें −
उदाहरण
#include <iostream>
#include <ctime>
using namespace std;
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues(int i) {
return vals[i]; // ith एलिमेंट का रेफरेंस लौटाएं
}
// उपरोक्त परिभाषित फंक्शन को कॉल करने के लिए मेन फंक्शन
int main() {
cout << "Value before change" << endl;
for (int i = 0; i < 5; i++) {
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
setValues(1) = 20.23; // दूसरा एलिमेंट बदलें
setValues(3) = 70.8; // चौथा एलिमेंट बदलें
cout << "Value after change" << endl;
for (int i = 0; i < 5; i++) {
cout << "vals[" << i << "] = ";
cout << vals[i] << endl;
}
return 0;
}
आउटपुट
Value before change vals[0] = 10.1 vals[1] = 12.6 vals[2] = 33.1 vals[3] = 24.1 vals[4] = 50 Value after change vals[0] = 10.1 vals[1] = 20.23 vals[2] = 33.1 vals[3] = 70.8 vals[4] = 50
रेफरेंस लौटाते समय, सावधान रहें कि जिस ऑब्जेक्ट को संदर्भित किया जा रहा है वह स्कोप से बाहर न जाए। इसलिए लोकल वेरिएबल का रेफरेंस लौटाना वैध नहीं है। लेकिन आप हमेशा स्टेटिक वेरिएबल पर रेफरेंस लौटा सकते हैं।
int& func() {
int q;
// return q; // कंपाइल टाइम एरर
static int x;
return x; // सुरक्षित, x इस स्कोप के बाहर रहता है
}