三年游戏人 2015-11-14 12:06 采纳率: 50%
浏览 1709

c++中显式实例化的问题?

先看看一下代码:
#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的显示不是跟上面定义的非模板函数在函数特征上一样了么?
这样不算重定义么?
为什么还能正常运行呢?
求解= =

  • 写回答

3条回答 默认 最新

  • threenewbee 2015-11-14 12:10
    关注
     比如说,这样的函数:
    class A {};
    class B : public A {}; 
    class C : public B {};
    void foo(A a) {}
    void foo<T>(B b) {}
    那么
    C c;
    foo(c);
    请问调用的是哪个?
    
    
    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配