我写了以下代码:
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
template <class T> T Min(T a, T b)
{
cout<<"template function: ";
if(a<b)
return a;
return b;
}
char *Min(char *a, char *b)
{
cout<<"non-template function: ";
if(strcmp(a,b)==0)
return a;
return b;
}
int main()
{
char c[]="x",d[]="y";
cout<<Min('x','y')<<endl;
cout<<Min("x","y")<<endl;
cout<<Min(c,d)<<endl;
return 0;
}
输出:
template function: x
template function: y
non-template function: y
第一个函数调用没问题,它正在调用模板函数。但是,为什么第二个函数也调用模板函数,而它是一个字符串常量。它不应该调用非模板函数吗???
还有为什么第二个函数调用的输出是y
,不是x
吗?尽管两者都是字符串,但使用字符串常量和 char 类型数组调用函数有什么区别?