一、c++中引用的文法是這樣的:
int x = 100;
int& _x = x;
它的意思就是是給變量x起了一個别名,在以後的代碼中,_x其實就是x,這兩個是等價的。舉個例子,在《唐伯虎點秋香》中,唐伯虎叫做華安,又叫做9527,其實這三個名字都是同一個人,引用就是這個意思。
注意事項:
引用初始化的時候一定要綁定一個變量;
引用一旦初始化,則終身為這個變量服務;
不能傳回局部變量的引用,就像指針一樣,不能傳回局部變量的指針;
二、引用的幾處應用
1、普通的引用
int x = 100;
int& _x = x;
這裡還有一個問題,就是int& x = 100;如果寫成這樣,編譯器會報錯,對常數的引用必須加const修飾,const int& x = 100;
2、作為函數的形參
int max(int& x,int& y),這樣做的好處是沒有對實參進行複制拷貝,提高了效率。
3、引用作為函數的傳回值
對于這樣一個函數int max(int& x,int& y),我們可以這樣用int z = max(1,2),這很正常,我們都這樣用,但是你絕對不能這樣用max(1,2) = 100;也就是說,函數的傳回值不能作為左值。但是如果寫成這樣int& max(jint& x,int& y)之後,max(1,2) = 100這句話立馬就是合理的了。
#include <iostream>
using namespace std;
int& getmax(int& x1,int& y1){
return x1 > y1 ? x1 : y1;
}
void main(){
int x = 10;
int y = 123;
//int z = getmax(x,y);
int& z = getmax(x,y);//用引用來接,和不用引用來接
//int z = getmax(x, y);//對比一下,用引用來接傳回值,和不用引用來接有什麼差別
getmax(x,y) = 1000;//把z和y全部綁到一起
cout << z << endl;
cout << y <<endl;
}
上面的代碼如果用引用來接,則輸出的z和y都是1000,如果注釋掉引用來接這一行,換成沒有用引用來接,則輸出的z和y是123,1000.
三、引用的實作
引用的特點就是:一個引用一旦引用了一個變量,就不能再去引用其他的變量了,但是引用的變量可以重新被指派。基于上面的特點,我們來看兩個指針:
int x = 100;
1:int const * pi = &x;
2:int * const pi = &x;
第一個指針表示這個指針pi還可以解除目前綁定,然後綁定到其他指針上,但是所綁定對象的值不能被重新賦進去。就是說如果有int y = 100的話,pi = &y是合法的,但是*pi = 200就是不合法的。
第二個指針和第一個相反,*pi = 200是合法的,但是pi = &y是不合法,根據這兩個指針的性質,第二個指針就是引用的實作。