সি-তে আমরা এক্সপ্রেশনের বাম দিকেই ফাংশন নাম ব্যবহার করতে পারি না। সি++-এ আমরা এটি করতে পারি। এটি কিছু ফাংশন দ্বারা সম্ভব যা রেফারেন্স ভেরিয়েবল রিটার্ন করে।
একটি সি++ ফাংশন পয়েন্টার রিটার্ন করার মতোই রেফারেন্স রিটার্ন করতে পারে।
যখন একটি ফাংশন রেফারেন্স রিটার্ন করে, তবে এটি তার রিটার্ন ভ্যালুর একটি ইমপ্লিসিট পয়েন্টার রিটার্ন করে। এই পদ্ধতিতে, একটি ফাংশন অ্যাসাইনমেন্ট স্টেটমেন্টের বাম পাশে ব্যবহার করা যায়। উদাহরণস্বরূপ, নিচের সাধারণ প্রোগ্রামটি বিবেচনা করুন:
উদাহরণ
#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]; // i-তম এলিমেন্টের রেফারেন্স রিটার্ন
}
// উপরে সংজ্ঞায়িত ফাংশন কল করার জন্য main ফাংশন
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 এই স্কোপের বাইরে বাস করে
}