普通函数与函数模板的区别
生活随笔
收集整理的這篇文章主要介紹了
普通函数与函数模板的区别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
普通函數與函數模板區別:
-
普通函數調用時可以發生自動類型轉換(隱式類型轉換)
-
函數模板調用時,如果利用自動類型推導,不會發生隱式類型轉換
-
如果利用顯示指定類型的方式,可以發生隱式類型轉換
#include <iostream> using namespace std; //普通函數 int myAdd01(int a, int b) {return a + b; }//函數模板 template<class T> T myAdd02(T a, T b) {return a + b; }//使用函數模板時,如果用自動類型推導,不會發生自動類型轉換,即隱式類型轉換 void test01() {int a = 10;int b = 20;char c = 'c';cout << myAdd01(a, c) << endl; //正確,將char類型的'c'隱式轉換為int類型 'c' 對應 ASCII碼 99//myAdd02(a, c); // 報錯,使用自動類型推導時,不會發生隱式類型轉換myAdd02<int>(a, c); //正確,如果用顯示指定類型,可以發生隱式類型轉換 }int main() {test01();system("pause");return 0; }
建議使用顯示指定類型的方式,調用函數模板,因為可以自己確定通用類型T
普通函數與函數模板的調用規則
調用規則如下:
如果函數模板和普通函數都可以實現,優先調用普通函數
可以通過空模板參數列表來強制調用函數模板
函數模板也可以發生重載
如果函數模板可以產生更好的匹配,優先調用函數模板
總結:既然提供了函數模板,最好就不要提供普通函數,否則容易出現二義性
總結
以上是生活随笔為你收集整理的普通函数与函数模板的区别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 函数模板案例_利用函数模板封装一个排序的
- 下一篇: 模板的局限性