先看看一下代码:
#include
template
T lesser(T a, T b)
{
return a < b ? a : b;
}
int lesser(int a, int b)
{
a = a < 0 ? -a : a;
b = b < 0 ? -b : b;
return a < b ? a : b;
}
int main()
{
using namespace std;
int m = 20;
int n = -30;
double x = 15.5;
double y = 25.9;
cout << lesser(m, n) << endl;
cout << lesser(x, y) << endl;
cout << lesser<>(m, n) << endl; //***
cout << lesser<int>(x, y) << endl;
cin.get();
return 0;
}
看看打着星号的那一行。
这一行进行了显式实例化,就是直接告诉编译器我要
template
T lesser(T a, T b)
这个模板的int形式,即是:
int lesser(int a, int b)
那么问题来了:
这个int的显示不是跟上面定义的非模板函数在函数特征上一样了么?
这样不算重定义么?
为什么还能正常运行呢?
求解= =