区别:
1、普通函数调用时可以发生自动类型转换(隐式类型转换)
2、函数模板调用时,如果用自动类型推导,不会发生隐式类型转换
3、如果利用显示指定类型的方式,可以发生隐式类型转换
示例:
#include "iostream"
#include <string>
using namespace std;
/*
1、普通函数调用时可以发生自动类型转换(隐式类型转换)
2、函数模板调用时,如果用自动类型推导,不会发生隐式类型转换
3、如果利用显示指定类型的方式,可以发生隐式类型转换
*/
//普通函数
int myAdd(int a, int b)
{
return a+b;
}
//模板函数
template<class T>
int myAddT(T a, T b)
{
return a + b;
}
void testAdd()
{
int a = 10;
int b = 20;
char c = 'a';
//普通函数会发生隐式转换
cout << myAdd(a, c) << endl; // 结果是107
//模板函数发生自动类型推导
cout << myAddT(a, b) << endl;
//myAddT(a, c); //数据类型不一样,报错
//模板函数显示指定类型,发生隐式转换
cout << myAddT<int>(a, c) << endl;
}
int main() {
testAdd();
system("pause");
return 0;
}
建议:调用函数模板时,建议使用显示指定类型的方式调用。这样,自己可以确定通用类型T。