常引用引用作為返回值
更多細節
引用是乙個別名,也就是某個已存在的變數的另乙個名字。對某個物件的引用進行操作,就是直接對這個物件進行操作。
建立乙個引用的語句如下:
型別識別符號 & 引用變數名 = 目標變數名;
例如:
// 原始變數
int a;
double b;
// 宣告引用變數
int& ref_a = a;
double
& ref_b = b;
我們嘗試對原始變數賦值,並且列印原始變數和引用變數的值:
#include
using
namespace std;
intmain()
編譯執行,輸出結果是:
a: 9
ref_a: 9
b: 6.7
ref_b: 6.7
這個輸出結果是符合預期的。
與指標相區別,引用有以下的特點:
首先,不存在空引用。引用只能也必須在建立時被初始化為乙個已存在的變數(連線到一塊合法記憶體)。而建立指標時可以不賦初值,可以在任何時候被初始化,也可以為空。
int a =9;
int& ref_a = a;
// 正確,引用變數 ref_a 被初始化為 a
int& ref_a;
// 錯誤,未給 ref_a 初值,編譯會出錯
第二,引用不能更換目標。一旦引用被初始化為乙個物件,就不能被指向另乙個物件。而指標可以在任何時候重新指向另乙個物件。
double a =
17.09
;double b =
6.7;
double
& ref_a = a;
// 至此正確
double
& ref_a = b;
// 出錯,不能多次指向
下面我們以實現乙個交換函式為例,對比指標和引用的使用方法。
void
swap
(__,__)
int main (
)
引用實現void
swap
(double
&x,double
&y)
呼叫時使用:
swap
(a,b)
;
指標實現void
swap
(double
*x,double
*b)
呼叫時使用:
swap
(&a,
&b);
宣告方式:const 型別識別符號 & 引用變數名 = 目標變數名;
以 const 方式宣告的引用,則不能通過引用對目標變數的值進行修改,從而使目標變數成為 const,比較安全。
int a;
const
int&ref_a = a;
ref_a =1;
// 錯誤
a =1
;// 正確
宣告方式:
型別識別符號 & 函式名 (形參列表及型別說明)
當函式返回乙個引用時,實際上返回乙個指向返回值的隱式指標。這使得函式就可以放在賦值語句的左邊。例如:
#include
using
namespace std;
int vals=
;int
&setvalues
(int i)
intmain()
C 中的引用(記錄 理解)
type name var int main 注意 普通引用在宣告時,必須用其他的變數進行初始化 不能用常量進行初始化 swap函式的實現對比 void swap int a,int b swap a,b void swap int pa,int pb swap a,b 注意 引用作為函式引數宣告時...
C 全面理解C 中的引用
說到引用,一般c 的教材中都是這麼定義的 1,引用就是乙個物件的別名。2,引用不是值不佔記憶體空間。3,引用必須在定義時賦值,將變數與引用繫結。那你有沒有想過,上面的定義正確嗎?編譯器是如何解釋引用的?這裡先給出引用的本質定義,後面我們再進一步論證。1,引用實際是通過指標實現的。2,引用是乙個常量指...
C 全面理解C 中的引用
說到引用,一般c 的教材中都是這麼定義的 1,引用就是乙個物件的別名。2,引用不是值不佔記憶體空間。3,引用必須在定義時賦值,將變數與引用繫結。那你有沒有想過,上面的定義正確嗎?編譯器是如何解釋引用的?這裡先給出引用的本質定義,後面我們再進一步論證。1,引用實際是通過指標實現的。2,引用是乙個常量指...