2.1 区别:
- 普通函数调用,可以发生隐式类型转换
- 函数模板 用自动类型推导,不可以发生隐式类型转换
- 函数模板 用显式指定类型类型推导,可以发生隐式类型转换
2.1普通函数调用,可以发生隐式类型转换
#include<iostream>
using namespace std;
//1.普通函数
int Add(int a, int b)
{
return a+b;
}
//测试函数
void test()
{
cout << Add(10, 10) << endl;
cout << Add(10, 'A') << endl;
}
int main()
{
test();
return 0;
}
运行结果:
20
75
普通函数调用时可以发生隐式类型转换,在Add(10,'A')函数中,字符A被隐式换为了int类型,其值变为了其对应的ASCII码65,因此相加结果变为75
2.2函数模板 用自动类型推导,不可以发生隐式类型转换
#include<iostream>
using namespace std;
//模板函数
template <class T>
int Add(T a, T b)
{
return a+b;
}
//测试函数
void test()
{
//自动类型推导
cout << Add(10, 'A') << endl;
}
int main()
{
test();
return 0;
}
结果报错
函数模板 用自动类型推导,在Add(10,'A')函数中,字符A的类型为char,无法发生隐式类型转换,因此报错
2.3函数模板 用显式指定类型推导,可以发生隐式类型转换
#include<iostream>
using namespace std;
//3.模板函数
template <class T>
int Add(T a, T b)
{
return a+b;
}
//测试函数
void test()
{
//显式指定类型为int
cout << Add<int>(10, 'A') << endl;
}
int main()
{
test();
return 0;
}
运行结果:
75
函数模板 用显式指定类型推导,在Add(10,'A')函数中,字符A被隐式换为了int类型,其值变为了其对应的ASCII码65,因此相加结果变为75