天天看點

c++引用與指針的差別及引用的底層實作

引用的特點:

①一個變量可取多個别名。

②引用必須初始化。

③引用隻能在初始化的時候引用一次 ,不能更改為轉而引用其他變量。

使用引用時須注意:

(1)&在這裡不是求位址運算,而是起辨別作用。

(2)類型辨別符是指目标變量的類型。

(3)聲明引用時,必須同時對其進行初始化。

(4)引用聲明完畢後,相當于目标變量名有兩個名稱,即該目标原名稱和引用名,且不能再把該引用名作為其他變量名的别名。

(5)對引用求位址,就是對目标變量求位址。即引用名是目标變量名的一個别名。

(6)不能建立引用的數組。因為數組是一個由若幹個元素所組成的集合,是以無法建立一個由引用組成的集合,但是可以建立數組的引用。

(7)引用常見的使用用途:作為函數的參數、函數的傳回值。

(8)不要傳回一個臨時變量的引用。

(9)如果傳回對象出了目前函數的作用域依舊存在,則最好使用引用傳回,因為這樣更高效。

引用和指針的差別和聯系:

(1)指針是一個實體,而引用僅是個别名;

(2)引用隻能在定義時初始化一次,之後不能綁定到其它變量(從一而終);指針變量的值可變。

(3)引用必須指向有效的變量,指針可以為空。

(4)sizeof指針對象和引用對象的意義不一樣。sizeof引用得到的是所指向的變量的大小,而sizeof指針是對象位址的大小。

(5)指針和引用自增(++)自減(–)意義不一樣,引用的自增是綁定對象的自增,指針的自增是位址以所指對象類型大小為機關移動一個機關,指向下一個位址。

(6) 相對而言,引用比指針更安全,指針比引用更為靈活,但是其風險也很大。使用指針時一定要檢查指針是否為空(NULL),且空間回收後指針最好置零,以免野指針的發生造成記憶體洩漏等問題。

引用的實作:

理論上引用不占記憶體空間而指針占用記憶體空間,但實際上編譯器是使用const指針來實作引用的,隻是把這一細節對上層屏蔽了。

c++引用與指針的差別及引用的底層實作
c++引用與指針的差別及引用的底層實作

繼續閱讀