C++新增了一種複合類型一引用變最。引用是己定義的變量的别名(另一個名稱)。例如,如果将twain 作為clement變量的引用,則可以交替使用twain和clement來表示該變量。
建立引用變量
C和C++使用&符号來訓示變簸的位址。C++給&符号賦予了另一個含義,将其用來聲明引用。例,要将rodents作為rats變量的别名,可以這樣做:
int rats;
int & rodents = rats; // makes rodents an alias for rats
其中,&不是位址運算符,而是類型辨別符的一部分。就像聲明中的char*指的是指向char的指針一樣, int &指的是指向im的引用。上述引用聲明允許将rats和rodents互換——它們指向相N的值和記憶體單元, 程式表明了這一點。
#include<iostream>
int main()
{
using namespace std;
int rats=101;
int &rodents=rats;
cout<<"rats= "<<rats;
cout<<", rodents="<<rodents<<endl;
rodents++;
cout<<"rats= "<<rats;
cout<<", rodents="<<rodents<<endl;
cout<<"rats address="<<&rats;
cout<<", rodents address="<<&rodents<<endl;
return 0;
}
運作結果:
從中可知,rats和rodents的值和位址都相同(具體的位址和顯示格式随系統而異)。将rodents加1将影響這兩個變量。更準确地說,rodents++操作将一個有兩個名稱的變最加1。
對于C語言使用者而言,首次接觸到引用時可能也會有些困惑,因為這些使用者很自然地會想到指針,但它們之間還是有差別的。例如,可以建立指向rats的引用和指針:
int rats = 101;
int & rodents = rats; // rodents a reference
int * prats = &rats; // prats a pointer
這樣,表達式rodents和*prats都可以同rats互換,而表達式&rodents和prats都可以同&rats互換。從這一點來說,引用看上去很像僞裝表示的指針(其中,*解除引用運算符被隐式了解)。實際上,引用還是不同于指針的。除了表示法不同外,還有其他的差别。例如,差别之一是,必須在聲明引用時将初始化, 而不能像指針那樣,先聲明,再指派:
int rat;
int & rodent;
rodent = rat; //No, you can't do this.
注意:必須在聲明引用變量時進行初始化。
引用更接近const指針,必須在建立時進行初始化,一但與某個變量關聯起來,就将一直效忠于它。 也就是說:
int & rodents = rats;
實際上是下述代碼的僞裝表示:
int * const pr = &rats;
其中,引用rodents扮演的角色與表達式*pr相同。