【发布时间】:2015-04-23 18:33:28
【问题描述】:
考虑以下代码:
#include <iostream>
template<typename T>
void f(T t)
{
(void)t;
std::cout << "templated f(T)\n";
}
template<typename T>
void entry(T t)
{
f(t);
}
void f(double d)
{
(void)d;
std::cout << "normal f(double)\n";
}
int main()
{
double d = 0.0;
entry(d);
return 0;
}
输出:
模板化 f(T)
我觉得这很令人惊讶,因为我认为普通函数将被选择而不是任何模板版本。为什么会这样?
我在玩耍时注意到的另一件事是:如果我将普通函数 void f(double) 放在模板化 void entry(T) 函数之前,代码将调用普通函数,基本上输出:
正常 f(双)
因此我的另一个问题是:为什么在这个特定示例中顺序很重要?
【问题讨论】:
标签: c++ function templates resolution