引用就是某一變數(目標)的乙個別名,對引用的操作與對變數直接操作完全一樣.
基本用法
例如: int & a = b;
引用作為函式返回值
先看乙個例子:
1 #include 2using
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&型別。
執行
constint &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 型別的引用...