C++中 引用的理解

引用是一種用來表示其他變量的別名,對引用進行的操作會反應到其所引用的變量中。

引用的聲明以及使用

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.儘量避免在函數中創建並返回堆內存變量的引用,否則極易因忘記釋放而導致內存泄露。

本文到此結束,感謝大家的閱讀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章