C 學習筆記之 引用

2022-07-08 03:00:11 字數 1499 閱讀 3683

引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣.

基本用法

例如: int & a = b;

引用作為函式返回值

先看乙個例子:

1 #include 2

using

namespace

std;

3class

node

9 node(int x=0

):x(x)

12};

13int

temp ;

14int &f()

18int

f1()

22node f2()

27int

main()

程式輸出結果為:

0x602194 0x602194

0x7fffe0565418 0x602194

0x602194 0x602194

0x7fffe056541c 0x602194

0x7fffe0565410 0x7fffe0565410

80 80

從結果中可以看到,當使用引用作為程式返回值並且將這個返回值賦值給引用型別時,他們的位址是相同的(都指向temp這個變數),其他情況都產生了值的賦值,發生了位址的變化。由此也可以看出,使用引用可以減少值的複製,特別是當需要傳的資料特別大的時候。

另外,函式中返回非引用類物件賦值給const 引用變數時輸出結果有些奇怪,不明白裡面的copy函式為什麼不呼叫但只加上就可以使他們的位址相同。

常引用基本用法如下:

int b = 4

;const

int a = b;

使用常引用可以是引用的值不可修改。這樣可以防止因誤操作引發的資料修改,保證了安全性。

引用函式作為左值

一般非引用函式都是只能作為右值,函式一旦計算完成那麼它就是乙個確定的常數。但引用函式不同。它既可作為左值,又可作為右值。

int &d = ++f();

相當於

int a[10

];int &array = a;

這是它作為左值的應用。

但當我執行

int &d = f()++;

這樣會產生錯誤。錯誤資訊為:

error: invalid initialization of non-const reference of type 'int&' from an rvalue of type 'int'

這個錯誤資訊與執行

int &d = 5;

的錯誤資訊一致,說明f()++操作實際上是相當於先把f()的值存到乙個整型常量中,然後f()(相當於temp)的值加一.乙個整型常量無法複製給int&型別。

執行

const

int &d = f()++;(使用常引用)

int d = f()++;(把常量值拷貝到變數中)

才可以正常編譯。

C 學習筆記之 引用

先宣告一下,這裡的內容大多是 c 程式設計思想 中的內容,我最近在學習c 覺得裡面的很多話不錯,另外例子也都自己實驗了一番,有些現象很有趣,希望與大家分享。引用 reference 就像能自動地被編譯器間接引用的常量型指標。常量型指標的含義就是常量修飾指標,即指的地方不變,但所指地方的內容可以改變。...

C 學習筆記之引用

引用的概念 引用的本質 引用的意義 思考點引用是c 中引入的乙個新概念,它是乙個已定義變數的別名。int a 0 int b a 引用在c 中的內部實現是通過常指標來實現的 type a type const a 但又不等價於常指標 區別間思考點1 引用定義時必須被初始化,原因是引用的本質是乙個常指...

C 學習筆記之引用

型別名 引用名 某變數名 比如 int r n r引用了n,r的型別是int 某個變數的引用,等價於這個變數,相當於該變數的乙個別名。引用只能引用變數,不能引用常量和表示式。t 型別的引用或t型別的變數可以用來初始化const t 型別的引用。const t 型別的常變數和const t 型別的引用...