最近一直在糾結在c++中是選擇指標還是引用。糾結了很長時間,現在基本上可以確定下來。
首先說明乙個指標和引用直接的區別。
這個區別很常見,熟悉c++的人應該都很說上來。
1. 指標是乙個實體,而引用僅是個別名;2. 引用使用時無需解引用(*),指標需要解引用;
3. 引用只能在定義時被初始化一次,之後不可變;指標可變;引用「從一而終;
4. 引用沒有 const,指標有 const,const 的指標不可變;
5. 引用不能為空,指標可以為空;
6. 「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身(所指向的變數或物件的位址)的大小;
typeid(t) == typeid(t&) 恒為真,sizeof(t) == sizeof(t&) 恒為真,但是當引用作為成員時,其占用空間與指標相同(沒找到標準的規定)。
7. 指標和引用的自增(++)運算意義不一樣。
在實際使用中,由於引用不可能為空,所以使用引用之前不需要像指標那樣進行空值檢查,這樣可以減少不少**量(據說對效率不影響),而且還不會因為空指標造成程式的崩潰。所以在物件導向的c++中,應該秉持著 能使用引用的地方,都不用指標 的原則。
下面再來看看引用的弊端。
c++引用很方便,但是它本身也是有弊端的。
當乙個類中包含引用成員時,這個類就無法使用語言生成的預設建構函式,拷貝建構函式和賦值函式。這是因為引用不能為空,必須在建構函式中為引用成員賦值,語言預設生成的函式不具備這個功能。預設建構函式在c++中時非常重要的概念,特別是在使用stl時,因此為了預設建構函式,必須摒棄引用成員變數。
最後總結一下引用使用的位置。
1. 函式直接的引數傳遞,優先考慮引用。
2. 函式返回值,優先考慮引用。
3. 類的資料成員,盡量不用引用。
引用不能為空,如果可能存在空物件時,請使用指標。
C 引用 指標的選擇
最近一直在糾結在c 中是選擇指標還是引用。糾結了很長時間,現在基本上可以確定下來。首先說明乙個指標和引用直接的區別。這個區別很常見,熟悉c 的人應該都很說上來。1.指標是乙個實體,而引用僅是個別名 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次,之後不可變 指標可變 引用...
C 中的指標 引用 指標引用
在c 指標的用處很大,可以快讀的訪問位址空間,而且本身不佔太大記憶體。指標操作在引數傳遞的時候非常方便。既可以作為傳入引數,又可以作為返回值。但是可不可作為函式的傳出引數呢?下面通過乙個例子來說明。教室裡面包含多個老師,每個老師管理多個學生 學生類 pragma once include class...
C 的指標引用
示例 一級指標實現賦值 include using namespace std int m value 1 一級指標引數 void func int p,int dest intmain int argc,char ar include using namespace std int m value...