真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C++之引用-創(chuàng)新互聯(lián)

文章目錄
  • 前言
  • 一、引用是什么?
  • 二、引用的特性
  • 三、使用場(chǎng)景
    • 1、修改實(shí)參
    • 2、做返回值
  • 四、傳值、傳地址、傳引用的效率
  • 五、引用和指針的區(qū)別
  • 總結(jié)

創(chuàng)新互聯(lián)企業(yè)建站,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),專注于網(wǎng)站建設(shè)技術(shù),精于網(wǎng)頁(yè)設(shè)計(jì),有多年建站和網(wǎng)站代運(yùn)營(yíng)經(jīng)驗(yàn),設(shè)計(jì)師為客戶打造網(wǎng)絡(luò)企業(yè)風(fēng)格,提供周到的建站售前咨詢和貼心的售后服務(wù)。對(duì)于成都網(wǎng)站制作、做網(wǎng)站中不同領(lǐng)域進(jìn)行深入了解和探索,創(chuàng)新互聯(lián)在網(wǎng)站建設(shè)中充分了解客戶行業(yè)的需求,以靈動(dòng)的思維在網(wǎng)頁(yè)中充分展現(xiàn),通過(guò)對(duì)客戶行業(yè)精準(zhǔn)市場(chǎng)調(diào)研,為客戶提供的解決方案。
前言

每個(gè)人除了自己的名字之外,總有幾個(gè)綽號(hào),像水滸傳中李逵又叫黑旋風(fēng),C++中也有這么個(gè)概念,那就是引用,又稱別名。


在這里插入圖片描述

一、引用是什么?

引用不是新定義的一個(gè)變量,而是共用所引用變量的內(nèi)存空間,簡(jiǎn)而言之就是這個(gè)變量的別名。

#includeint main(){int a = 10;
	int& ra = a;
	ra = 100;
	std::cout<< "a:"<< a<< std::endl; //a = 100
	return 0;
}
二、引用的特性

1、引用在定義時(shí)必須初始化;
2、一個(gè)變量可以有多個(gè)引用;(就像一個(gè)人有多個(gè)綽號(hào)一樣)
3、一旦引用了一個(gè)實(shí)體,則不能引用另外的實(shí)體;

三、使用場(chǎng)景 1、修改實(shí)參

眾所周知在函數(shù)參數(shù)傳遞時(shí),分為兩種,一種是值傳遞,一種是指針傳遞
如果想要修改實(shí)參,則值傳遞不能改變,而指針傳遞可以,但是指針傳遞可讀性差,也可能傳空指針過(guò)去,比較危險(xiǎn),麻煩。
這個(gè)時(shí)候“引用”的方式正是可以綜合它們倆的有點(diǎn),既可以改變值,又不用傳遞它的地址過(guò)去。
經(jīng)典的例子:兩個(gè)變量值交換,代碼如下:

#includevoid swap(int& a, int& b){int temp = a;
	a = b;
	b = temp;
}

int main(){int a = 10;
	int b = 20;
	printf("交換前a=%d,b=%d\n", a, b);
	swap(a, b);
	printf("交換后a=%d,b=%d\n", a, b);
	return 0;
}

輸出為:
交換前a=10,b=20
交換后a=20,b=10

2、做返回值
#includeint& Add(int a, int b){int c = a + b;
	return c;
}

int main(){int& a = Add(1, 2); 
	Add(5, 6);
	std::cout<< "a="<< a<< std::endl; //??這里會(huì)打印什么呢 是3嗎
	return 0;
}

那么這里會(huì)打印3嗎,答案是否~,這里就需要注意的是函數(shù)調(diào)用完回收并不會(huì)空間釋放,而是仍然在分配的內(nèi)存那一塊
在這里插入圖片描述
其實(shí)這一點(diǎn)跟指針很像,雖然在概念層是引用不會(huì)開(kāi)辟空間,只是共用實(shí)體的空間,其實(shí)在底層的實(shí)現(xiàn)上跟指針是一摸一樣的。
在這里插入圖片描述
通過(guò)反匯編不難看出,指針和引用的賦值方式是一樣的 。

四、傳值、傳地址、傳引用的效率
#include#includestruct A{int arr[10000];
};
//值傳遞
void TestFunc1(A a){}
//引用傳遞
void TestFunc2(A& a){}
//地址傳遞
void TestFunc3(A* a){}

void TestFunc(){A a;
	size_t begin1 = clock();
	for(size_t i = 0; i< 100000; i++){	TestFunc1(a);
	}
	size_t end1 = clock();
	std::cout<< "值傳遞使用的時(shí)間為:"<< end1 - begin1<< std::endl;

	size_t begin2 = clock();
	for (size_t i = 0; i< 100000; i++){	TestFunc2(a);
	}
	size_t end2 = clock();
	std::cout<< "引用傳遞使用的時(shí)間為:"<< end2 - begin2<< std::endl;

	size_t begin3 = clock();
	for (size_t i = 0; i< 100000; i++){TestFunc3(&a);
	}
	size_t end3 = clock();
	std::cout<< "指針傳遞使用的時(shí)間為:"<< end3 - begin3<< std::endl;
}
int main(){for(size_t i = 0; i<= 10; i++){TestFunc();
	}
	return 0;
}

輸出為:
在這里插入圖片描述
可以清晰的看出,值傳遞效率低,引用傳遞和指針傳遞效率差不多,這是因?yàn)橹祩鬟f的時(shí)候,會(huì)臨時(shí)拷貝一份傳過(guò)來(lái)的值,所以效率低下。

五、引用和指針的區(qū)別

1、引用在定義時(shí)必須初始化,指針不用
2、指針有多級(jí)指針,引用則沒(méi)有
3、sizeof引用的變量是它類型原有內(nèi)存大小,指針則是根據(jù)計(jì)算機(jī)平臺(tái)位數(shù)來(lái)計(jì)算(64位是8個(gè)字節(jié))
4、沒(méi)有NULL引用,只有NULL指針
5、引用自加則實(shí)體自加,而指針自加是地址往后移動(dòng)
6、訪問(wèn)實(shí)體方式不同,指針需要解引用,引用編譯器會(huì)自己去解析處理
7、引用在初始化時(shí)引用了一個(gè)實(shí)體后,不能再引用另外的實(shí)體,而指針可以指向多個(gè)實(shí)體
8、引用對(duì)比指針而言相對(duì)安全

總結(jié)

C++引用就此總結(jié)完畢,大家一起加油~~,明天又是美好的一天?。。?br />在這里插入圖片描述

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


文章標(biāo)題:C++之引用-創(chuàng)新互聯(lián)
文章源于:http://weahome.cn/article/igpoi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部