普通函数与函数模板的区别(CPP)

#include<iostream>
using namespace std;

int myAdd01(int a,int b)	//普通函数,类型是int型 
{
	return a+b;
}

template<typename T>
T myAdd02(T a,T b)
{
	return a+b;
}


int main()
{
	int a=10,b=20;
	char c='c';	//Ascll 码中 a->97  c->99
	cout<<myAdd01(a,c)<<endl;	//结果是109
	//如果是普通函数 你设定了类型它就回自动类型推导
	
//	cout<<myAdd02(a,c)<<endl;   报错因为你传入两个不同类型 编译器不会给你推导
	cout<<myAdd02<int>(a,c)<<endl;		//如果你显示指定类型就会自动推导为int型 
	
 
}
#include<iostream>
using namespace std;

//普通函数和函数模板(重载)的调用

void myPrint(int a,int b)
{
	cout<<"普通函数的调用\n";
} 

template<typename T>
void myPrint(T a,T b)
{
	cout<<"函数模板的调用\n";
}


template<typename T>
void myPrint(T a,T b,T c)
{
	cout<<"重载的函数模板的调用\n";
}

void Case1()
{
	//如果是直接调用两个函数 因为是重载的,所以编译器会优先调用普通函数
	myPrint(10,20); 
}

void Case2()
{
	//通过空模板形式跟编译器表示你要调用的是模板函数
	myPrint<>(10,20); 
}

void Case3()
{
	//函数模板也是可以进行重载的
	myPrint(10,20,30);
}

void Case4()
{
	//如果函数模板更好匹配数据,优先调用模板
	//比如普通函数是int型,但是我传的参数是char型,与其普通函数int转char
	//不如直接用函数模板
	
	char a='c';
	char b='f';
	myPrint(a,b); 
	 
}

int main()
{
	Case1();
	cout<<"*****\n";
	Case2();
	cout<<"*****\n";
	Case3();
	cout<<"*****\n";
	Case4();
	cout<<"*****\n";
}





おすすめ

転載: blog.csdn.net/qq_52245648/article/details/120254961