函数模板与普通函数的区别
1.普通函数调用时可以发生自动类型转换(隐式转换);
2.函数模板调用时,如果利用自动类型推导,不会发生隐式类型转换;
3.如果利用显示指定类型的方式,可以发生隐式类型转换。
代码示例
#include <iostream>
using namespace std;
#include <string>
//普通函数
void myFunc_1(int a, int b)
{
cout <<"调用的是普通函数" <<endl;
cout << "a+b = " << a+b << endl;
}
//函数模板
template<class T>
void myFunc_2(T a,T b)
{
cout <<"调用的是函数模板" <<endl;
cout << "a+b = " << a+b <<endl;
}
void test1()
{
int a = 10;
char b = 'a';
myFunc_1(a,b); //普通函数调用时可以发生自动类型转换
//myFunc_2(a,b); //错误用法,函数模板子自动类型转换时,不会发生隐式类型转换
myFunc_2<int>(a,b); //函数模板利用显示类型的方式,可以发生隐式类型转换
}
int main()
{
test1();
return 0;
}
输出结果
总结:建议在使用显示指定类型转换,调用函数模板,因为可以自己确定通用类型T。