成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++-----模板-創(chuàng)新互聯(lián)

舉個(gè)例子,如果要你交換兩個(gè)數(shù)值,你會(huì)怎么做呢?

成都創(chuàng)新互聯(lián)公司主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁(yè)視覺(jué)設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、全網(wǎng)整合營(yíng)銷推廣、網(wǎng)站程序開(kāi)發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、手機(jī)網(wǎng)站開(kāi)發(fā)、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)公司、WEB系統(tǒng)開(kāi)發(fā)、域名注冊(cè)、國(guó)內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個(gè)建站步驟的完善服務(wù)體系。一人跟蹤測(cè)試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為生料攪拌車行業(yè)客戶提供了網(wǎng)站營(yíng)銷服務(wù)。

————你肯定會(huì)說(shuō),那就寫一個(gè)Swap交換函數(shù)吧!

沒(méi)錯(cuò)!Swap函數(shù)確實(shí)可以實(shí)現(xiàn)交換,但如果我想讓你同時(shí)進(jìn)行不能類型的數(shù)值呢,比如float、double、int、short.......等,你打算怎么實(shí)現(xiàn)呢?

————函數(shù)重載!當(dāng)然可以,函數(shù)重載來(lái)實(shí)現(xiàn)完成沒(méi)毛病。但是你想想,如果有很多個(gè)不同的類型需要進(jìn)行交換,那你覺(jué)得你需要寫多少個(gè)函數(shù)重載來(lái)實(shí)現(xiàn)呢?

肯定的!這相當(dāng)麻煩。

而且還存在如下問(wèn)題:

1. 重載的函數(shù)僅僅是類型不同,代碼復(fù)用率比較低,只要有新類型出現(xiàn)時(shí),就需要用戶自己增加對(duì)應(yīng)的函數(shù)
2. 代碼的可維護(hù)性比較低,一個(gè)出錯(cuò)可能所有的重載均出錯(cuò)

為了解決這個(gè)問(wèn)題,我們就可以通過(guò)函數(shù)模板來(lái)實(shí)現(xiàn):

函數(shù)模板: ?1.概念:

函數(shù)模板代表了一個(gè)函數(shù)家族,該函數(shù)模板與類型無(wú)關(guān),在使用時(shí)被參數(shù)化,根據(jù)實(shí)參類型產(chǎn)生函數(shù)的特定類型版本。

(模板是泛型編程的基礎(chǔ))

2.格式:

template

typename 是用來(lái)定義模板參數(shù)關(guān)鍵字,也可以用class代替。

Swap實(shí)例:

templatevoid Swap(T& a, T& b)
{
	T tmp = a;
	a = b;
	b = tmp;
}
int main() {
	int a = 10, b = 20;
	std::cout<< "a="<< a<< " b="<< b<< std::endl;
	Swap(a, b);
	std::cout<<"a="<< a<< " b="<< b<< std::endl;
	double m = 1.3, n = 2.3;
	std::cout<< "m="<< m<< " n="<< n<< std::endl;
	Swap(m, n);
	std::cout<< "m="<< m<< " n="<< n<< std::endl;
}

3.原理:

函數(shù)模板是一個(gè)藍(lán)圖,它本身并不是函數(shù),是編譯器用使用方式產(chǎn)生特定具體類型函數(shù)的模具。所以其實(shí)模板就是將本來(lái)應(yīng)該我們做的重復(fù)的事情交給了編譯器

在編譯器編譯階段,對(duì)于模板函數(shù)的使用,編譯器需要根據(jù)傳入的實(shí)參類型來(lái)推演生成對(duì)應(yīng)類型的函數(shù)以供調(diào)用。比如:當(dāng)用double類型使用函數(shù)模板時(shí),編譯器通過(guò)對(duì)實(shí)參類型的推演,將T確定為double類型,然后產(chǎn)生一份專門處理double類型的代碼,對(duì)于字符類型也是如此

4.函數(shù)模板實(shí)例化:

用不同類型的參數(shù)使用函數(shù)模板時(shí)即為函數(shù)模板實(shí)例化。

函數(shù)模板實(shí)例化分為:隱式實(shí)例化和顯式實(shí)例化。

隱式實(shí)例化:

讓編譯器根據(jù)實(shí)參推演模板參數(shù)的實(shí)際類型。

templateT Add(const T& a,const T& b)
{
	return a + b;
}
int main() {
	int a1 = 10, a2 = 20;
	double d1 = 10.0, d2 = 20.0;
	std::cout<< "Add="<< Add(a1, d1)<< std::endl;
	std::cout<< "Add="<< a2 + d2<< std::endl;
}

先看這段代碼,在我們編譯時(shí)會(huì)過(guò)不了。

該語(yǔ)句不能通過(guò)編譯,因?yàn)樵诰幾g期間,當(dāng)編譯器看到該實(shí)例化時(shí),需要推演其實(shí)參類型通過(guò)實(shí)參a1將T推演為int,通過(guò)實(shí)參d1將T推演為double類型,但模板參數(shù)列表中只有一個(gè)T,編譯器無(wú)法確定此處到底該將T確定為int 或者 double類型而報(bào)錯(cuò)
注意:在模板中,編譯器一般不會(huì)進(jìn)行類型轉(zhuǎn)換操作,因?yàn)橐坏┺D(zhuǎn)化出問(wèn)題,編譯器就需要背黑鍋

所以有兩種處理方法:1. 用戶自己來(lái)強(qiáng)制轉(zhuǎn)換; 2.使用顯示實(shí)例化。

方法1:

templateT Add(const T& a,const T& b)
{
	return a + b;
}
int main() {
	int a1 = 10, a2 = 20;
	double d1 = 10.0, d2 = 20.0;
	std::cout<< "Add="<< Add(a1, (int)d1)<< std::endl;
	std::cout<< "Add="<< a2 + d2<< std::endl;
}

顯式實(shí)例化:?

在函數(shù)名后<>中指定模板參數(shù)的實(shí)際類型。

templateT Add(const T& a,const T& b)
{
	return a + b;
}
int main() {
	int a1 = 10, a2 = 20;
	double d1 = 10.0, d2 = 20.0;
	std::cout<< "Add<>()="<< Add(a1, d1)<< std::endl;//顯式實(shí)例化
	std::cout<< "Add="<< a2 + d2<< std::endl;
}

注意:如果參數(shù)不匹配,編譯器會(huì)嘗試進(jìn)行隱式類型轉(zhuǎn)換,如果無(wú)法轉(zhuǎn)換成功編譯器會(huì)報(bào)錯(cuò)。

5.函數(shù)模板匹配原則:

1.一個(gè)非模板函數(shù)可以和一個(gè)同名的函數(shù)模板同時(shí)存在,而且該函數(shù)模板還可以被實(shí)例化為這個(gè)非模板函數(shù)

2.對(duì)于非模板函數(shù)和同名函數(shù)模板,如果其他條件都相同,在調(diào)動(dòng)時(shí)會(huì)優(yōu)先調(diào)用非模板函數(shù)而不會(huì)從該模板產(chǎn)生出一個(gè)實(shí)例。如果模板可以產(chǎn)生一個(gè)具有更好匹配的函數(shù), 那么將選擇模板

3.模板函數(shù)不允許自動(dòng)類型轉(zhuǎn)換,但普通函數(shù)可以進(jìn)行自動(dòng)類型轉(zhuǎn)換

你是否還在尋找穩(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)查看詳情吧

當(dāng)前題目:C++-----模板-創(chuàng)新互聯(lián)
標(biāo)題路徑:http://jinyejixie.com/article32/egspc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開(kāi)發(fā)、關(guān)鍵詞優(yōu)化電子商務(wù)、移動(dòng)網(wǎng)站建設(shè)外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
炎陵县| 小金县| 湖北省| 潜山县| 余姚市| 阳信县| 江口县| 潮州市| 柳江县| 南溪县| 宝兴县| 泰州市| 长海县| 黎平县| 启东市| 格尔木市| 定兴县| 灵石县| 阿克苏市| 留坝县| 防城港市| 秭归县| 温宿县| 凌云县| 莱阳市| 项城市| 湘潭市| 田阳县| 岳池县| 忻城县| 金昌市| 贡嘎县| 萨迦县| 蕲春县| 潍坊市| 蓬安县| 桐柏县| 枣庄市| 江都市| 进贤县| 五家渠市|