不同点:
是否可以发生类型隐式转换
普通函数与函数模板区别:**
- 普通函数调用时可以发生自动类型转换(隐式类型转换)
#include <iostream>using namespace std;int myAdd(int a,int b){return a + b;}int main(){int a = 10;int b = 10;char c = 'c';cout << myAdd(a,b) << endl;cout << myAdd(a,c) << endl;system("pause");return 0;}

 函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换
#include <iostream>using namespace std;template<typename T>T myAdd(T a,T b){return a + b;}int main(){int a = 10;int b = 10;char c = 'c';//cout << myAdd(a,b) << endl;cout << myAdd(a,c) << endl; // 错误system("pause");return 0;}

如果利用显示指定类型的方式,可以发生隐式类型转换
#include <iostream>using namespace std;template<typename T>T myAdd(T a,T b){return a + b;}int main(){int a = 10;int b = 10;char c = 'c';// cout << myAdd(a,b) << endl;cout << myAdd<int>(a,c) << endl; // 指定数据类型为整形,那么就会把字符型隐式转换为整形system("pause");return 0;}
**运行过程中自动将字符型隐式转换成了整型数据
示例:
//普通函数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;}
