005函数模板与普通函数在一起调用规则研究

/*
主要是关于细则的研究

函数模板不允许自动类型转化
普通函数能够进行自动类型转换
*/

/*
总结:
1 函数模板可以像普通函数一样被重载
2 C++编译器优先考虑普通函数
3 如果函数模板可以产生一个更好的匹配,那么选择模板(不失真)
4 可以通过空模板实参列表的语法限定编译器只通过模板匹配
*/
#include<iostream>
using namespace std;

template <typename T>
T Max(T a,T b)
{
	cout << "template Max(T a,T b)" << endl;
	return  a > b ? a : b;
}

int Max(int a,int b)
{
	cout << "int Max(int a,int b)" << endl;
	return a > b ? a : b;
}

template <typename T>
T Max(T a,T b,T c)
{
	cout << "T Max(T a,T b,T c)" << endl;
	return Max(Max(a, b), c);
}


int main(void)
{
	int a = 1;
	int b = 2;
	cout << Max(a, b) << endl;//当函数模板和普通函数都符合调用时,优先选择普通函数
	cout << Max<>(a, b) << endl;//若显示使用函数模板,则使用<> 类型列表

	cout << Max(3.0, 23.3) << endl;//如果 函数模板产生更好的匹配 使用函数模板(将double类型转换为int类型要失真)
	cout << Max(4.3, 34.4, 34.3);//重载
	cout <<  Max('a', 100) << endl;//调用普通函数 可以隐式类型转换 
	system("pause");
	return 0;
}

/*
 * int Max(int a,int b)
2
template Max(T a,T b)
2
template Max(T a,T b)
23.3
T Max(T a,T b,T c)
template Max(T a,T b)
template Max(T a,T b)
34.4int Max(int a,int b)
100
请按任意键继续. . .


SunRise于东北电力大学第二教学楼1121
 */

猜你喜欢

转载自blog.csdn.net/baixiaolong1993/article/details/89482482