C++模板參數(shù)的具體概念是什么

這篇文章給大家介紹C++模板參數(shù)的具體概念是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。

創(chuàng)新互聯(lián)是一家企業(yè)級(jí)云計(jì)算解決方案提供商,超15年IDC數(shù)據(jù)中心運(yùn)營(yíng)經(jīng)驗(yàn)。主營(yíng)GPU顯卡服務(wù)器,站群服務(wù)器,重慶服務(wù)器托管,海外高防服務(wù)器,機(jī)柜大帶寬,動(dòng)態(tài)撥號(hào)VPS,海外云手機(jī),海外云服務(wù)器,海外服務(wù)器租用托管等。

C++編程語(yǔ)言是一個(gè)功能強(qiáng)大的計(jì)算機(jī)應(yīng)用語(yǔ)言,它的出現(xiàn)在一定程度上大大降低了開(kāi)發(fā)人員的負(fù)擔(dān),提高了開(kāi)發(fā)效率。我們?cè)谶@里先來(lái)了解一下C++模板參數(shù)的相關(guān)概念。簡(jiǎn)單的說(shuō),可以把模板看作一種類(lèi)型,函數(shù)模板也不例外。

既然是類(lèi)型,那么我們?cè)谑褂媚0搴瘮?shù)的時(shí)候就應(yīng)該是使用它的一個(gè)實(shí)例。既然是類(lèi)型與實(shí)例的關(guān)系,那么就應(yīng)該有一個(gè)類(lèi)型的實(shí)例化的問(wèn)題。我們對(duì)普通類(lèi)型進(jìn)行實(shí)例化的時(shí)候通常需要提供必要的參數(shù)以,模板函數(shù)也不例外。只是C++模板參數(shù)不是普通的參數(shù),而是特定的類(lèi)型。也就是說(shuō)在實(shí)例化一個(gè)函數(shù)模板的時(shí)候需要以類(lèi)型作為參數(shù)。通常,模板的參數(shù)分為模板參數(shù)和調(diào)用參數(shù)。例如:

template <typename T1, typename T2, typename RT> inline RT const& max(T1 const& a, T2 const& b)  {  //TODO: 代碼實(shí)現(xiàn)  ........  }

其中,***行定義了函數(shù)模板參數(shù);第二行的函數(shù)參數(shù)則定義了調(diào)用參數(shù),需要注意的是返回值并不屬于函數(shù)模板的調(diào)用參數(shù)。

在調(diào)用一個(gè)模板的時(shí)候,最重要的是在調(diào)用的時(shí)候能正確的推導(dǎo)出C++模板參數(shù)。這里有幾點(diǎn)要注意的:

1:顯示的實(shí)例化函數(shù)模板。例如:

template <typename T> inline T const& max(T const& a, T const& b)  {  return a < b ? b : a;  }  // 實(shí)例化并調(diào)用一個(gè)模板  max<double>(4, 4.2);

第十行,通過(guò)顯示的指定C++模板參數(shù)為double而實(shí)例化了一個(gè)模板。

2:隱式的實(shí)例化一個(gè)函數(shù)模板。例如:

template <typename T> inline T const& max(T const& a, T const& b)  {  return a < b ? b : a;  }  // 隱式的實(shí)例化并調(diào)用一個(gè)函數(shù)模板  int i = max(42, 66);

第8行,我們沒(méi)有顯示的指定函數(shù)模板參數(shù),但它能自動(dòng)的去推導(dǎo)出函數(shù)模板參數(shù)為int。這里可能有個(gè)問(wèn)題。如果非模板函數(shù)它的定義和推導(dǎo)后的模板函數(shù)實(shí)例一樣,會(huì)產(chǎn)生什么結(jié)果呢?例如:

inline int const& max(int const& a, int const& b)  {  // 為了便于區(qū)分,讓返回結(jié)果+100  return a < b ? a+10 : b+100;  }  template <typename T> inline T const& max(T const& a, T const& b)  {  return a < b ? b : a;  }  // 這里調(diào)用的究竟是模板函數(shù)還是非模板函數(shù)?  int i = max(42, 66);

實(shí)際上,第14行的代碼首先回去查看是否有滿(mǎn)足要求的非模板函數(shù);如果沒(méi)有,再根據(jù)參數(shù)去匹配并實(shí)例化相應(yīng)的模板函數(shù)。所以,它調(diào)用的應(yīng)該是非模板的max函數(shù)。

3: 也可以使用部分缺省的C++模板參數(shù)。你不用指定全部的模板參數(shù),比如,你可以從左到右的,指定一部分參數(shù)。例如:

// 從左至右定義了三個(gè)參數(shù)  template <typename RT, typename T1, typename T2> inline RT const& max(T1 const& a, T2 const& b)  {  //TODO: 代碼實(shí)現(xiàn)  ..  }  // 可以只指定***個(gè)返回參數(shù)。即,要求返回double類(lèi)型  max<double>(4, 4.2);

上面的代碼中,由于返回參數(shù)類(lèi)型不屬于調(diào)用參數(shù),所以必須明確的指定它為double類(lèi)型。而T1和T2屬于調(diào)用C++模板參數(shù),能從函數(shù)調(diào)用中推導(dǎo)出來(lái)。

關(guān)于C++模板參數(shù)的具體概念是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

網(wǎng)頁(yè)題目:C++模板參數(shù)的具體概念是什么
網(wǎng)站網(wǎng)址:http://bm7419.com/article44/pcishe.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、動(dòng)態(tài)網(wǎng)站搜索引擎優(yōu)化、微信小程序、網(wǎng)站排名App開(kāi)發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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)

成都網(wǎng)站建設(shè)