新聞中心
? 引用是什么呢?我們來看個例子

#includeusing namespace std;
int main()
{
int a = 10;
//引用定義
int& b = a;
//取地址
int* p = &a;
return 0;
} 引用不是新定義一個變量,而是給已經(jīng)存在的變量取別名,我們不難看出引用在語法層面上,沒有開辟新空間,是對原本的空間又取了一個新名字,即,地址是一樣的。既然都是那個空間,那么只要改變一個也就改變另一個了
int main()
{
int a = 10;
int& b = a;
a = 20;
b = 30;
return 0;
}? 引用有哪些特性呢?
? 1.引用在定義時必須初始化
//int a = 10;
//int& b;
不初始化是編譯不過的2.一個變量可以有多個引用
int a = 10;
int& b = a;
int& c = a;
int& d = b;? 3.引用一旦引用一個實體,再不能引用其它實體
int a = 10;
int& b = a;
int c = 20;
b = c; //把c賦值給b
return 0;這點和指針不同的是:指針的指向可以改變,而引用初始化后就不能更改對象了
? 引用有什么用呢?
// 1.引用做參數(shù)
void swap(int* p1, int* p2) //傳地址
{
int tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void swap(int& r1, int& r2) //傳引用
{
int tmp = r1;
r1 = r2;
r2 = tmp;
}
//void swap(int r1, int r2) //傳值
//{
// int tmp = r1;
// r1 = r2;
// r2 = tmp;
//}
int main()
{
int x = 0, y = 1;
swap(x, y);
swap(&x, &y);
return 0;
}我們需要注意的是,上面三個函數(shù)構(gòu)成函數(shù)重載(滿足參數(shù)類型不同、參數(shù)個數(shù)不同、參數(shù)順序不同),但是當(dāng)傳值與傳引用同時存在的時候,調(diào)用會出現(xiàn)問題。
? 看下面代碼:
//傳值返回
int Add(int a, int b)
{
int c = a + b;
return c;
}
int main()
{
int ret = Add(1, 2);
cout<< ret<< endl;
return 0;
}? 所有傳值返回都要生成一個拷貝,當(dāng)c返回的時候,產(chǎn)生一個臨時變量,ret接收這個臨時變量。如果c比較?。?或8個字節(jié))一般是寄存器充當(dāng)臨時變量。如果c比較大,臨時變量放在調(diào)用Add函數(shù)的棧幀中。
傳引用返回
//int& Add(int a, int b)
//{
// int c = a + b;
// return c;
//}
//
//int main()
//{
// int ret = Add(1, 2);
// cout<< ret<< endl;
//
// return 0;
//}引用返回的意思是不產(chǎn)生c的拷貝返回,直接返回c的引用。
上面代碼的問題是:存在非法訪問,Add(1, 2)的返回值是c的引用,而函數(shù)執(zhí)行完棧幀已經(jīng)銷毀,又訪問c位置的空間。
看下面代碼:
傳引用返回
//int& Add(int a, int b)
//{
// int c = a + b;
// return c;
//}
//
//int main()
//{
// int& ret = Add(1, 2);
// cout<< ret<< endl;
//
// cout<< ret<< endl;
//
// return 0;
//}這代碼中的ret就是c的引用,因此,兩次打印的值是不同的。
? 那么,什么時候傳引用返回呢?
當(dāng)函數(shù)返回時,出了函數(shù)作用域,如果返回對象沒有還給系統(tǒng),則可以使用引用返回。
//常引用
void f(const int& x)
{
cout<< x<< endl;
}
int main()
{
權(quán)限放大,不可以
//const int a = 10;
//int& b = a;
//權(quán)限不變,可以
const int a = 10;
const int& b = a;
//權(quán)限變小,可以
int c = 10;
const int& d = c;
f(a);
f(c);
f(d);
return 0;
}總結(jié):引用的作用主要體現(xiàn)在傳參和傳返回值 1、引用傳參和傳返回值,有些場景下面,可以提高性能。(大對象+深拷貝對象) 2、引用傳參和傳返回值,輸出型參數(shù)和輸出型返回值。通俗點說,有些場景下面,形參的改變可以改變實參。 3.有些場景下面,引用返回,可以改變返回對象。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
當(dāng)前題目:C++入門--引用-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://www.dlmjj.cn/article/ejogd.html


咨詢
建站咨詢
