目錄
函式模板是什麼?
函式模板的例項化:
函式模板的原理:
函式模板不是乙個真正的函式,只是編譯器生成**的模具,程式設計師給編譯器生成**的一種規則
template 操作符
使用:
template//模板引數
t add(t left, t right) // 引數列表
函式模板可以實現乙個通用型別的函式,上面就是乙個通用型別的加法函式
注意:
1. 如果模板引數列表中有多個型別的引數,每個引數前都必須要新增typename
2. 在模板引數列表中既可以使用typename宣告型別,也可以使用class宣告型別
3. 雖然class和struct幾乎相同,但是在模板引數列表中不能使用struct來宣告型別
隱式例項化
template t add(t left, t right)
int main()
注意:隱式例項化中,引數不匹配時,編譯器不會對引數進行隱式型別轉化,直接報錯
顯式型別轉化:
template t add(t left, t right)
int main()
在顯式型別轉化中明確指定模板引數列表中t的實際型別,在引數匹配時,編譯器會嘗試對引數進行隱式型別轉化,不成功則報錯
編譯器在編譯**是,如果檢測到對函式模板進行例項化:
隱式例項化:編譯器首先會對引數型別進行推演,用推演的結果替換模板引數列表中的t,最後生成具體對應型別的函式引數共使用者呼叫
顯式例項化:明確指定模板引數列表中t的實際型別,編譯器在編譯**時,如果發現是顯式例項化--->直接生成**,如果引數型別不匹配,會嘗試進行隱式型別轉換
如果轉換成功,就通過編譯,如果轉化失敗則報錯
c 函式模板
include using namespace std template t max t a,t b,t c int main int main int i1 185,i2 76,i3 567,i double d1 56.63,d2 90.23,d3 3214.78,d long g1 67854...
c 函式模板
關鍵字template總是放在模板的電腦關於與宣告的最前面,關鍵字後面是用逗號分隔的模板參數列,該列表是模板參數列,不能為空。模板引數可以是乙個模板型別引數,它代表了一種型別 也可以是乙個模板非型別引數,它代表了乙個常量表示式。模板型別引數由關鍵字class或typename後加乙個識別符號構成。在...
C 函式模板
c 提供了函式模板 function template 所謂函式模板,實際上是建立乙個通用函式,其函式型別和形參型別不具體指定,用乙個虛擬的型別來代表。這個通用函式就稱為函式模板。凡是函式體相同的函式都可以用這個模板來代替,不必定義多個函式,只需在模板中定義一次即可。在呼叫函式時系統會根據實參的型別...