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

来源:互联网 发布:java手动线程池使用 编辑:程序博客网 时间:2024/05/01 14:23
/*函数模板不允许自动类型转化普通函数能够进行自动类型转换*//*        1.函数模板可以像普通函数一样被重载2.c++编译器优先考虑普通函数3. 如果函数模板可以产生一个更好的匹配,那么选择函数模板4.可以通过空模板实参列表的语法限定编译器智能选择模板匹配*/#include <iostream>using namespace std;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){cout<<"T Max(T a ,T 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(){int a = 1;int b = 2;cout<<Max(a,b)<<endl;//当函数模板和普通函数都符合调用时,优先选择普通函数cout<<Max<>(a,b)<<endl;//若显示使用函数模板,则使用<>类型列表cout<<Max(3.0,4.0)<<endl;//如果函数模板可以产生更好的匹配 使用函数模板cout<<Max(3.0,4.0,5.0)<<endl;//重载cout<<Max('a',100)<<endl;//调用普通函数 因为普通函数可以进行隐式转换system("pause");return 0;}

0 0