引用的使用

2021-06-27 00:43:02 字數 3588 閱讀 3013

c++新增了一種復合型別————引用變數。

引用是已定義的變數的別名。引用是c++引入的新語言特性,是c++常用的乙個重要內容之一,正確、靈活地使用引用,可以使程式簡潔、高效,掌握c++的&符號,是提高**執行效率和增強**質量的乙個很好的辦法。

1:建立引用變數。

int sasuke = 10;

int & naruto = sasuke;//建立引用變數

注意:&運算子不是位址運算子,而是將naruto的型別宣告為int& (int型別的引用);

錯誤示例

int & sakura;

sakura = sasuke

注意:引用變數建立時候,必須對其進行初始化。

//測試引用的使用

2:引用用作函式引數

將引用用作函式引數傳遞的方法稱為按引用傳遞。c語言在進行引數傳遞的時候往往是按值傳遞,按值傳遞的行為導致被呼叫的函式使用的是值得拷貝。當然c也提供了避開按值傳遞的限制,比如按指標傳遞。

是乙個按值傳遞的例子

3:引用過程中的臨時變數

如果實參與引用型別不匹配,c++便會產生臨時變數,前提是引用必須是常引用。

下面我們來看乙個簡單的例子。

從這個程式中,我們不難發現程式報告了乙個型別異常的錯誤。因為我們的函式需要int型別的引用,而在main()函式中,我們給了add函式兩個double型的變數。這好像和我們的小標題不相符,臨時變數在**呢?我們來看下一段**。

仔細觀察**發生了變化,沒錯,我只是簡單的在add函式裡加上了const關鍵字,程式便能順利執行。那麼這是為什麼呢?通過輸出兩個變數的位址我們不難發現,前後兩個a b 的位址發生了變化,也就是產生了臨時變數。

因此當引用宣告為const型別,並且能轉換為正確的型別的時候,可以通過生成匿名的臨時變數使得程式正確執行。

4:引用用作返回值

返回引用和傳統的返回機制有什麼不同?為什麼要使用引用作為返回值?傳統返回機制與按值傳遞函式引數類似:計算關鍵字return後面的表示式,並將結果返回給函式。這其實是乙個將值複製到臨時位置,而呼叫程式使用這個值得過程。返回引用時候實際上返回的是被引用的變數的別名,省去了複製臨時變數的過程,因此效率更高。

那麼是不是將引用作為返回值就是十全十美的呢? 顯然不是,下面我們來看看引用有哪些危險的地方。

const int & add(int & a, int & b)

這個函式好像沒有什麼問題,但是仔細觀察我們發現temp變數在函式執行結束之後便被銷毀,這很可能會導致一系列的問題。

因此,將引用作為函式返回值得時候,應盡量避免返回函式終止時不再存在的記憶體單元引用。

5:引用用於類物件

談到c++,我們自然不能將類這個話題給省略掉,那麼引用如何在類中大顯身手呢?

我們經常使用引用來傳遞類的引數。比如我們熟悉的複製建構函式就是乙個典型的例子。

void showname(const string & firstname, const string & lastname)

int main()

在這個顯示姓名的例子中, 我們將string類的物件引用作為函式引數,來進行內部操作。

ps(c風格的字串作為string類物件引用引數)return語句前面我用綠色標註了一行**,如果你是個c++新手,你可能會疑惑,為什麼這樣可以呢?我們明明需要的是string物件啊。string物件定義了一種從char * string的轉換,因此我們能很簡單的用c風格的字串來初始化string類物件,在將char * 或 const char * 傳遞給 形參 const string &的過程中,程式會建立乙個正確的臨時變數,繼續進行操作。

當我們將類物件作為函式引數進行傳遞或將類物件作為返回值的時候,如果使用引用會省下產生臨時變數所需要的時間,因此提高了效率,而且在被調函式中我們能通過類物件直接對主調函式中的類物件進行修改。

引用總結:

1:單純給某個變數設計別名是無意義的,引用設計初衷就是在函式中進行引數傳遞,解決大型資料塊或物件的傳遞效率問題。

2:引用和指標相比,顯著提高了程式的可讀性,無需如同指標一般對變數進行間接操作。

3:引用傳遞沒有臨時變數產生,提高了效率,而且還能通過const保證引用的安全性。

4:宣告引用後,變數實際上有兩個名稱,即原目標名稱和引用名,而且不能再把該引用名作為其他變數名的別名。

5:宣告引用並不是新建立了乙個變數,它只表示該引用目標變數名的別名,它本身不是資料類,因此引用本省不佔儲存單元,系統也不會給引用分配儲存單元。

6:不能建立陣列的引用。陣列是若干個元素集合,無法建立乙個陣列的別名。

引用使用 C 引用的使用方法

c 中引用是指給乙個變數起別名,別名和變數指向同一塊的記憶體資料 引用的基本語法 引用的基本語法 資料型別 變數名 該資料型別的變數 int x 10 int a x 引用的注意事項 1.引用在定義時必須初始化 int a 錯誤 引用 a 變數需要初始值設定2.引用在初始化之後就無法修改 用引用做函...

C 的引用使用

引用是c 中乙個很重要的概念。英文為reference,引用定義了物件的乙個別名。當物件的值修改時,引用會發生對應的改變 當引用的值發生改變時,被引用的物件的值也發生變化,因為物件和物件的應用操作的是同一位址單元。1 引用的定義 使用int a b 即可定義整型變數b的引用a。1 由於引用是物件的別...

C 變數的引用 使用變數的引用

c 可以對乙個資料可以使用引用,引用是c 對c語言的乙個重要擴充,引用是一種新的變數型別,它的作用是為乙個變數起乙個別名。比如要給變數temp起個別名change int temp 定義整型變數temp int change temp 宣告change是temp的引用上述 宣告了change是tem...