天天看點

C++ primer 十 引用變量

        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;

}

運作結果:
C++ primer 十 引用變量

       從中可知,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相同。

繼續閱讀