這篇文章給大家介紹C++模板參數(shù)的具體概念是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
創(chuàng)新互聯(lián)是一家企業(yè)級云計算解決方案提供商,超15年IDC數(shù)據(jù)中心運營經(jīng)驗。主營GPU顯卡服務器,站群服務器,重慶服務器托管,海外高防服務器,機柜大帶寬,動態(tài)撥號VPS,海外云手機,海外云服務器,海外服務器租用托管等。
C++編程語言是一個功能強大的計算機應用語言,它的出現(xiàn)在一定程度上大大降低了開發(fā)人員的負擔,提高了開發(fā)效率。我們在這里先來了解一下C++模板參數(shù)的相關(guān)概念。簡單的說,可以把模板看作一種類型,函數(shù)模板也不例外。
既然是類型,那么我們在使用模板函數(shù)的時候就應該是使用它的一個實例。既然是類型與實例的關(guān)系,那么就應該有一個類型的實例化的問題。我們對普通類型進行實例化的時候通常需要提供必要的參數(shù)以,模板函數(shù)也不例外。只是C++模板參數(shù)不是普通的參數(shù),而是特定的類型。也就是說在實例化一個函數(shù)模板的時候需要以類型作為參數(shù)。通常,模板的參數(shù)分為模板參數(shù)和調(diào)用參數(shù)。例如:
templateinline RT const& max(T1 const& a, T2 const& b) { //TODO: 代碼實現(xiàn) ........ }
其中,***行定義了函數(shù)模板參數(shù);第二行的函數(shù)參數(shù)則定義了調(diào)用參數(shù),需要注意的是返回值并不屬于函數(shù)模板的調(diào)用參數(shù)。
在調(diào)用一個模板的時候,最重要的是在調(diào)用的時候能正確的推導出C++模板參數(shù)。這里有幾點要注意的:
1:顯示的實例化函數(shù)模板。例如:
templateinline T const& max(T const& a, T const& b) { return a < b ? b : a; } // 實例化并調(diào)用一個模板 max (4, 4.2);
第十行,通過顯示的指定C++模板參數(shù)為double而實例化了一個模板。
2:隱式的實例化一個函數(shù)模板。例如:
templateinline T const& max(T const& a, T const& b) { return a < b ? b : a; } // 隱式的實例化并調(diào)用一個函數(shù)模板 int i = max(42, 66);
第8行,我們沒有顯示的指定函數(shù)模板參數(shù),但它能自動的去推導出函數(shù)模板參數(shù)為int。這里可能有個問題。如果非模板函數(shù)它的定義和推導后的模板函數(shù)實例一樣,會產(chǎn)生什么結(jié)果呢?例如:
inline int const& max(int const& a, int const& b) { // 為了便于區(qū)分,讓返回結(jié)果+100 return a < b ? a+10 : b+100; } templateinline T const& max(T const& a, T const& b) { return a < b ? b : a; } // 這里調(diào)用的究竟是模板函數(shù)還是非模板函數(shù)? int i = max(42, 66);
實際上,第14行的代碼首先回去查看是否有滿足要求的非模板函數(shù);如果沒有,再根據(jù)參數(shù)去匹配并實例化相應的模板函數(shù)。所以,它調(diào)用的應該是非模板的max函數(shù)。
3: 也可以使用部分缺省的C++模板參數(shù)。你不用指定全部的模板參數(shù),比如,你可以從左到右的,指定一部分參數(shù)。例如:
// 從左至右定義了三個參數(shù) templateinline RT const& max(T1 const& a, T2 const& b) { //TODO: 代碼實現(xiàn) .. } // 可以只指定***個返回參數(shù)。即,要求返回double類型 max (4, 4.2);
上面的代碼中,由于返回參數(shù)類型不屬于調(diào)用參數(shù),所以必須明確的指定它為double類型。而T1和T2屬于調(diào)用C++模板參數(shù),能從函數(shù)調(diào)用中推導出來。
關(guān)于C++模板參數(shù)的具體概念是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。