C++中的引用
引用就是變量的別名,在實際情況下,引用一般用於函數的形式參數。
一、引用規則
引用是一種複合類型,是通過在變量名前加上“&”來定義的,複合類型是指用其他類型定義的類型,引用類型一定關聯其他一種類型,但不可以定義引用類型的引用。引用就是變量的一個別名,引用定義的時候必須初始化也就是必須明確指向哪一個變量。
引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。
引用的聲明方法:類型標識符 &引用名=目標變量名;
【例1】:int a; int &ra=a; //定義引用ra,它是變量a的引用,即別名
說明:
(1)&在此不是求地址運算,而是起標識作用。
(2)類型標識符是指目標變量的類型。
(3)聲明引用時,必須同時對其進行初始化。
(4)引用聲明完畢後,相當於目標變量名有兩個名稱,即該目標原名稱和引用名,且不能再把該引用名作爲其他變量名的別名。
ra=1; 等價於 a=1;
(5)聲明一個引用,不是新定義了一個變量,它只表示該引用名是目標變量名的一個別名,它本身不是一種數據類型,因此引用本身不佔存儲單元,系統也不給引用分配存儲單元。故:對引用求地址,就是對目標變量求地址。&ra與&a相等。
(6 ) 不能建立數組的引用。因爲數組是一個由若干個元素所組成的集合,所以無法建立一個數組的別名.
(7)不能建立引用的引用,不能建立指向引用的指針。因爲引用不是一種數據類型,所以沒有引用的引用,沒有引用的指針。
例如:
int n;
int &&r=n;//錯誤,編譯系統把"int &"看成一體,把"&r"看成一體,即建立了引用的引用,引用的對象應當是某種數據類型的變量
int &*p=n;//錯誤,編譯系統把"int &"看成一體,把" *p "看成一體,即建立了指向引用的指針,指針只能指向某種數據類型的變量
(8)值得一提的是,可以建立指針的引用
例如:
int *p;
int *&q=p;//正確,編譯系統把" int * "看成一體,把"&q"看成一體,即建立指針p的引用,亦即給指針p起別名q。
二、const引用
const引用是指向const對象的引用,
const int i = 10;
const int &j = i;
int &n = i;//error 因爲n可改變,這與i不可變就造成了矛盾。
double i = 10;
double &j = j;
const double &n = j;
const int &m = i;
int &l = i;//error.
非const引用只能幫定到與之相同類型的變量上,而const引用可以綁定到不同但是相關的類型上。