C++ 普通函数与函数模板 区别以及调用规则01

//普通函数 和 函数模板 区别
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.1 区别:
    a. 普通函数可以隐式类型转换
    b. 函数模板如果是自动类型推导的使用方式, 是不可以发生隐式类型转换
    如果函数模板在调用的时候显示的指定了T的类型,是可以发生隐式类型转换的。 比如 funcTemplate(a, b);
    1.2 调用规则:
    a. 如果函数模板和普通函数都可以实现调用, 那么优先调用的是普通函数
    b. 可以通过空参数列表语法来强制调用 函数模板
    c. 函数模板也可以发生函数重载
    d. 如果函数模板可以产生更好的匹配, 优先使用的是函数模板
发布了100 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43903378/article/details/103944689