不同点:
是否可以发生类型隐式转换
普通函数与函数模板区别:**
- 普通函数调用时可以发生自动类型转换(隐式类型转换)
#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;
}