引用是一種用來表示其他變量的別名,對引用進行的操作會反應到其所引用的變量中。
引用的聲明以及使用
int i = 5;
int& r = i;//聲明引用r指向變量i
引用的聲明格式是 類型& 引用名;
和聲明指針變量一樣,這裏的 “&”符也不是取地址的意思,而是一種類似於“引用說明符”的東西,用來說明這個變量是引用類型。
聲明引用後,對引用進行的一切操作都相當於對其所引用的變量進行操作。例如讓上面的引用r自增:
r++;//等價於i++
此時i就等於6,同理,對引用r取地址,也是取的變量i的地址,其他所有操作都一樣。
可以將引用作爲函數形參:
void add(int& a,int& b){
a += b;//注意,實參中變量a的值將會被改變
}
add方法接受兩個int型引用,注意,調用這個函數之後實參a的值將會改變,這種按引用調用的函數不會在內存中創建實參的副本,而是直接操作實參,在這點上和傳址調用差不多,函數調用後實參的值將會被改變。
此外,在C++中,可以通過引用建立一個無名的實體,例如:
int& i = *new int(10);
std::cout << i;
那麼相應的釋放代碼就是:
delete &i;
引用的一些特點
1.首先,引用與指針不同,指針是一個變量,系統會爲指針變量分配內存,而引用本身不是一個變量,沒有他自己的內存空間。
2.引用在定義的時候必須爲其初始化,初始化以後,引用不可改變其引用的變量(即不可重新引用別的變量),這點與常量指針相似。
3.對引用取地址實際上是取被引用變量的地址,這點上文說過了。
4.被引用的對象必須爲左值,也就是必須是一個變量。(在c++11標準添加了右值引用,這裏不談)
5.引用聲明中的“&”符號僅作爲一種說明符,並非取地址符。
將引用作爲函數參數時的注意事項
1.避免錯誤地修改引用所指變量。按引用調用相當於傳址調用,是會改變實參變量值的一種調用方式。
2.如非必須修改引用所指變量的內容,應將引用形參聲明爲const引用,此外,形參引用聲明爲const可以接受const和非const的實參,聲明爲非const類型則不可以接受const的實參,請務必注意。
3.避免返回函數內的局部變量的引用。局部變量在離開作用域後會被自動釋放,請注意。
4.當函數的形參引用時,如果調用函數時傳遞的是右值,那麼實際上函數將會接收到一個臨時變量的引用,此時形參必須爲const引用,例如函數:
void add(const int& a,const int& b){
std::cout << a
<< std::endl
<< b;
}
如果我在調用的時候傳入右值:
add(10,20);
那麼此時add函數將會接收到兩個由系統創建的臨時變量的引用。
5.儘量避免在函數中創建並返回堆內存變量的引用,否則極易因忘記釋放而導致內存泄露。
本文到此結束,感謝大家的閱讀。