//普通函数 和 函数模板 区别
int myPlus(int a, int b)
{
return a + b;
}
template<class T>
T myPlus2(T a, T b)
{
return a + b;
}
void test01()
{
int a = 10;
int b = 20;
char c = 'c';
cout << myPlus(a, c) << endl; //隐式类型转换 将 char c转为 int类型
//myPlus2(a, c); //自动类型推导方式 ,不可以进行隐式类型转换的,但是显示指定类型方式可以进行隐式类型转换
}
//普通函数 和 函数模板 调用规则
template<class T>
void myPrint(T a, T b)
{
cout << "函数模板调用" << endl;
}
/*
//假设传入T是int类型 ,生成一个 下面的函数,这个函数 称为 模板函数
void myPrint(int a, int b)
{
cout << "函数模板调用" << endl;
}
*/
template<class T>
void myPrint(T a, T b , T c)
{
cout << "函数模板调用myPrint(T a, T b , T c)" << endl;
}
void myPrint(int a, int b)
{
cout << "普通函数调用" << endl;
}
void test02()
{
//1、如果普通函数和函数模板可以同时调用,优先使用是普通函数
int a = 0;
int b = 0;
//myPrint(a, b);
//2、如果想强制调用 函数模板中的内容,可以使用空参数列表
//myPrint<>(a, b);
3、函数模板 可以发生函数重载
//myPrint(a, b, 10);
//4、如果函数模板可以产生更好的匹配,那么优先使用是函数模板
char c = 'c';
char d = 'd';
myPrint(c, d);
}
int main(){
//test01();
test02();
system("pause");
return EXIT_SUCCESS;
}
普通函数和函数模板的区别以及调用规则 1.1 区别: a. 普通函数可以隐式类型转换 b. 函数模板如果是自动类型推导的使用方式, 是不可以发生隐式类型转换 如果函数模板在调用的时候显示的指定了T的类型,是可以发生隐式类型转换的。 比如 funcTemplate(a, b); 1.2 调用规则: a. 如果函数模板和普通函数都可以实现调用, 那么优先调用的是普通函数 b. 可以通过空参数列表语法来强制调用 函数模板 c. 函数模板也可以发生函数重载 d. 如果函数模板可以产生更好的匹配, 优先使用的是函数模板