Trong C, chúng ta không thể sử dụng tên hàm ở phía bên trái của một biểu thức. Trong C ++ wecan sử dụng nó như vậy. Điều này có thể được thực hiện bởi một số hàm trả về một số biến tham chiếu.
Một hàm C ++ có thể trả về một tham chiếu theo cách tương tự như nó trả về một con trỏ.
Khi một hàm trả về một tham chiếu, nó sẽ trả về một con trỏ không tường minh đến giá trị trả về của nó. Bằng cách này, một hàm có thể được sử dụng ở phía bên trái của một câu lệnh gán. Ví dụ, hãy xem xét chương trình đơn giản này -
Ví dụ
#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]; // return a reference to the ith element } // main function to call above defined function. 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; // change 2nd element setValues(3) = 70.8; // change 4th element cout << "Value after change" << endl; for ( int i = 0; i < 5; i++ ) { cout << "vals[" << i << "] = "; cout << vals[i] << endl; } return 0; }
Đầu ra
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
Khi trả về một tham chiếu, hãy cẩn thận rằng đối tượng được tham chiếu không nằm ngoài phạm vi. Vì vậy, không hợp pháp khi trả về một tham chiếu đến local var. Nhưng bạn luôn có thể trả lại một tham chiếu trên một biến tĩnh.
int& func() { int q; //! return q; // Compile time error static int x; return x; // Safe, x lives outside this scope }