c++template-基礎(chǔ)篇(一)

什么是函數(shù)模板?

函數(shù)模板提供了一種函數(shù)行為,該函數(shù)行為可以用多種不同的類型進(jìn)行調(diào)用,它和普通函數(shù)很相似,唯一的區(qū)別就是有些函數(shù)元素是未確定的,這些元素將在使用時(shí)被參數(shù)化。

一個(gè)簡單的函數(shù)模板
template <typename T>
inline T const& max(T const&a, T const&b)
{
    return a<b?b:a;
}

只要使用函數(shù)模板,編譯器會(huì)自動(dòng)地引發(fā)一個(gè)實(shí)例化過程,使用者不需要額外地請(qǐng)求模板的實(shí)例化。

編譯過程中,模板會(huì)被編譯兩次,分別是:

  • 實(shí)例化之前,先檢查模塊代碼本身,查看語法是否正確,比如遺漏;等錯(cuò)誤是在這里發(fā)現(xiàn)的。
  • 實(shí)例化期間, 檢查模塊代碼,查看是否所有的調(diào)用都有效。

一定要讓所有的函數(shù)模板的聲明在被調(diào)用的位置之前!

重載函數(shù)模板實(shí)例化順序
  • 一個(gè)非模板函數(shù)和一個(gè)同名的模板函數(shù)同時(shí)存在時(shí),一般條件相同時(shí)會(huì)先實(shí)例化非模板函數(shù)
  • 然而,如果模板可以產(chǎn)生一個(gè)更好匹配的函數(shù),那么將選擇模板
  • 可以顯示地指定一個(gè)空的模板實(shí)參列表,表明只有模板來匹配該調(diào)用, 而且所有的模板參數(shù)都應(yīng)該根據(jù)實(shí)參演繹出來
  • 模板不允許自動(dòng)類型轉(zhuǎn)換;但是普通函數(shù)可以進(jìn)行自動(dòng)類型轉(zhuǎn)換,所以調(diào)用需要自動(dòng)類型轉(zhuǎn)換的將使用非模板函數(shù)。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容