1.如果普通函式和模板函式都可以呼叫,優先呼叫普通函式。
下面**,普通函式和模板函式名稱一樣,傳入引數也一致,執行**是呼叫模板函式還是普通函式
#include using namespace std;
//模板函式
template void myadd(t a, t b)
//普通函式
void myadd(int a, int b)
void test01()
int main()
編譯執行
說明,如果普通函式和模板函式都可以呼叫,預設優先呼叫普通函式。
2.可以通過空模板引數列表,強制呼叫模板函式
如果上面的情況,我們不想預設使用普通函式,那麼就需要使用空模板函式,強制顯示呼叫模板函式
#include using namespace std;
//模板函式
template void myadd(t a, t b)
//普通函式
void myadd(int a, int b)
void test01()
int main()
上面第19行使用了<>,也就是空模板引數列表。 編譯執行
3.函式模板也可以發生函式過載
我們前面學習過普通函式的過載,函式模板也可以發生過載。
#include using namespace std;
//模板函式
template void myadd(t a, t b)
template void myadd(t a, t b, t c)
//普通函式
void myadd(int a, int b)
void test01()
int main()
上面模板函式發生過載,引數個數不一樣。
4.如果函式模板可以產生更好匹配,優先呼叫函式模板
有時候編譯器認為呼叫普通函式和模板函式都可以,只不過普通函式可以需要隱式轉換,而模板函式如果推導出來型別,也是可以呼叫。這種情況下,編譯器覺得模板更好匹配,隱式轉換太麻煩,所以會優先呼叫函式模板
#include using namespace std;
//模板函式
template void myadd(t a, t b)
//普通函式
void myadd(int a, int b)
void test01()
int main()
前面學習過 char在一定範圍內是可以隱式轉換為int型別,所以在test01()中,編譯器認為兩個函式都可以呼叫,但是模板匹配更好,所以這裡有點呼叫了模板函式。 C 模板 函式模板和模板函式
1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...
C 模板 函式模板和模板函式
1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...
C 模板 函式模板和模板函式
1.函式模板的宣告和模板函式的生成 1.1函式模板的宣告 函式模板可以用來建立乙個通用的函式,以支援多種不同的形參,避免過載函式的函式體重複設計。它的最大特點是把函式使用的資料型別作為引數。函式模板的宣告形式為 template 返回型別 函式名 參數列 其中,template是定義模板函式的關鍵字...