引用的幾點問題

引用的幾點問題

1引用vs指針
引用創建時初始化;不能爲NULL;一旦初始化,就不能改變引用關係
引用是變量別名,在創建時不用分配內存空間
 
2引用作爲函數參數
(1)傳遞引用給函數與傳遞指針給函數作用相同
(2)在內存中沒有產生實參副本,直接操作實參,減少了開銷
       一般變量作爲傳遞給函數的參數,要給形參開闢內存空間,形參是實參的副本
(3)使用指針作爲函數的參數雖然也能達到與使用引用的效果,但是,在被調函數中同樣要給形參分配存儲單元,且需要重複使用"*指針變量名"的形式進行運算,這很容易產生錯誤且程序的閱讀性較差;另一方面,在主調函數的調用點處,必須用變量的地址作爲實參。而引用更容易使用,更清晰。
3“引用”與多態的關係?
引用是除指針外另一個可以產生多態效果的手段。這意味着,一個基類的引用可以指向它的派生類實例。
4常引用
既要提高程序的效率,又保護傳遞給函數的數據不在函數中被改變
常引用聲明方式:const 類型標識符 &引用名=目標變量名;
例1
int a ;
const int &ra=a;
ra=1; //錯誤
a=1; //正確
例2
string foo( );
void bar(string & s);
那麼下面的表達式將是非法的:
bar(foo( ));
bar("hello world");
原因在於foo( )和"hello world"串都會產生一個臨時對象,而在C++中,這些臨時對象都是const類型的。因此上面的表達式就是試圖將一個const類型的對象轉換爲非const類型,這是非法的。
引用型參數應該在能被定義爲const的情況下,儘量定義爲const 。
5將“引用”作爲函數返回值類型的格式、好處和需要遵守的規則?
格式:類型標識符 &函數名(形參列表及類型說明){ //函數體 }
好處:在內存中不產生被返回值的副本;(注意:正是因爲這點原因,所以返回一個局部變量的引用是不可取的。因爲隨着該局部變量生存期的結束,相應的引用也會失效,產生runtime error!所以一定先聲明要返回的變量爲全局變量。同理也不能返回函數內部new分配的內存引用)。
 
發佈了36 篇原創文章 · 獲贊 4 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章