日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
C++入門--引用-創(chuàng)新互聯(lián)

? 引用是什么呢?我們來看個例子

創(chuàng)新互聯(lián)公司專注于網(wǎng)站建設(shè)|成都網(wǎng)站維護(hù)公司|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計與制作經(jīng)驗,為許多企業(yè)提供了網(wǎng)站定制設(shè)計服務(wù),案例作品覆蓋廣告推廣等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身開發(fā)品質(zhì)網(wǎng)站。
#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