獨立引用

獨立引用

引用類型用於定義變數或對象的別名,稱作獨立引用。獨立引用主要用於解決大型軟體開發中名字空間的衝突問題。

概述

到目前為止,引用的最常見用法是通過引用調用傳送變元,並作為函式的返回值。不過·可以說明引用僅是一個變數。這類引用稱為獨立引用。一般說來,獨立引用是變數的別名,它們實際上是同一變數的兩個不同的名字,在記憶體中代表同一塊存儲區,具有相同的地址和大小。對它們的操作實際上是對同一塊存儲區的操作。

當建立獨立引用時.所建立的是變數的另一個名。在建立時.所有獨立引用變數必須初始化。其理由很好理解。除初始化外.不能更改引用變數所指的對象。因此,在說明時它必須初始化。相對於引用。初始化是完全獨立的操作。

如下程式說明了如何使用獨立引用:

# include lostrcam.h”

main()

{

int a;

int&ref=a; //independent reference

a=10;

cout < < a < < ″ ″ < < ref < < ″/n″;

ref=100;

cout<<a<<″″<<ref <<″/n″;

int b=19;

ref=b; // this puts b’svalue into a

cout<<a<<″″<<ref <<″/n″;

ref一一; //this decrements a

//it does not affect what ref refers to

cout<<a<<″″<<ref <<″/n″;

reture 0;

}

程式顯示如下結果:

10 10

100 100

19 19

18 18

通過獨立引用可引用常量。例如:int & count=9;

實際上。獨立引用不是實際值,因為每個引用是另一個變數的另一個名字。用兩個名字描述相同的對象可使程式出現混淆情況。

引用

引用(reference)又稱稱參考變數,它可以看作是被引用變數的別名。在C中,指針變數也可以看作是它所指向的變數的別名,但通過指針只能間接地使用它所指向的變數。在C++中,通過引用可以直接使用被引用變數,因此使用更方便,程式可讀性更好。

引用分為獨立引用、引用參數和返回引用的函式三種情況,下面分別敘述。

獨立引用

對變數的引用稱為獨立引用,為了方便,以下簡稱引用。

引用通過引用操作符&來定義:類型&引用=變數;

一般說來,引用是變數的別名,它們實際上是同一變數的兩個不同的名字,在記憶體中代表同一塊存儲區,具有相同的地址和大小。對它們的操作實際上是對同一塊存儲區的操作。下面通過右圖所示的一個實際例子加以解釋。

獨立引用 獨立引用

該例定義了整型變數k的引用kref,kref實際上是k的一個別名。因此,對kref的任何操作就等價於對k的操作。同樣,對k的任何操作亦等價於對kref的操作,因為k和kref實際上是記憶體中同一個整型量的兩個不同的名字,這一點從程式的執行結果中可以清楚地看出。

獨立引用也可用於常量。例如:int&ref=200;

定義了常量200的引用ref。

使用引用應注意如下幾點:

(1)定義引用時,除下面將要講到的引用參數、返回引用的函式和類成員的引用外,必須初始化。為此,賦值號右邊的變數必須是已存在的變數,換句話說,應先定義變數,然後才能定義引用。

(2)因常量一般不分配存儲空間,因此,當定義一個常量的引用或者說用一個常量去初始化一個引用時,編譯器會創建一臨時變數,然後以此I|缶時變數去初始化該引用,同時發出一警告信息:“臨時變數已用於初始化‘ref”’(Temporary used to initialize’ref’),這不影響使用,可不予理睬。

(3)引用的類型可以是標準數據類型,也可以是用戶自己定義的類型,但最好與被引用變數的類型相一致,否則編譯時,編譯器也會創建一臨時變數,然後以此臨時變數去初始化該引用,並發出同上的警告信息。這種情況將導致引用的值不同於被引用變數的值。

引用參數

在C中,函式調用時參數傳遞採用兩種方式:傳值和傳地址。它們各有優缺點,傳值調用使用方便、可讀性好,但它是單向傳遞,只能傳人不能傳出,即不能改變實參的值,且對於組合類型的變數(如數組、結構型等),函式中要開闢較大的棧空間,效率較低;傳地址調用可以更新實參的值,不占用棧空間,效率較高,但使用上不太方便、可讀性稍差(要使用&和*符)。

獨立引用 獨立引用

在c++中還可以採用傳遞引用的方式,即函式的參數為引用(簡稱傳引用)。傳引用既有傳值方式使用方便自然的優點,又有傳地址方式能更新實參值的長處。在右圖中的例子對比地使用了傳地址和傳引用兩種方法,以充分地說明傳引用的優點。

該例中有兩個函式:一個是inc,它有兩個參數,第一個參數i是一個指針,因此是傳地址方式;第二個參數deha是一個傳值參數,inc的功能是將delta的值加到i所指的變數上,即通過傳地址方式使i所指的實參的值發生改變。

另一個函式是dec,它也有兩個參數:第一個參數r是一個引用參數;第二個參數delta是一傳值參數。dec的功能是從r中減去deha的值,通過傳引用而使與r對應的實參的值發生改變。在主函式main中,定義了3個整型變數X、d1和d2,其初值分別為55、15和10。調用inc(&x,d1)後,x的值增為70;調用dec(x,d2)後,x的值減為60;調用dec(x,d2)時,引用參數r和實參x建立引用關係,因此,在dec函式中對r的計算實際上是對實參x的計算,輸出結果(x=60)清楚地說明了這一點。

此例說明,通過引用參數,被調用函式(例中的dec)可以改變調用函式(例中的main)中實參(例中的x)的值,而它的使用方式又和傳值調用類似,實參x前不用寫地址運算符&,在dec函式內,可以直接使用引用參數,而不必使用*運算符,較為方便自然。

返回引用的函式

函式的返回值可以是引用,其一般形式為:類型&函式名(形參表)

獨立引用 獨立引用

將函式定義為返回引用的函式,其主要目的是將該函式的調用表達式作為左值放在賦值號的左邊。請看如右圖所示的例子。

在該程式中,函式 change 被定義為返回對字元數組的引用,可以在main函式中引用數組ch的元素,也可以對數組的某個元素賦值。數組ch的第4個元素原為?,執行後,!取代了原來數組中的?。

需要注意的是,在使用返回引用的函式時,return語句的返回值通常為全局變數或靜態變數,如果為函式內的自動變數,則當函式調用結束時,自動變數消失,從而會造成錯誤。

相關詞條

相關搜尋

熱門詞條

聯絡我們