请考虑以下代码:
#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;
}
Run Code Online (Sandbox Code Playgroud)
输出:
模板f(T)
我觉得这很令人惊讶,因为我认为普通函数将在任何模板版本上被选中.为什么会这样?
我在玩游戏时注意到的另一件事是:如果我将正常函数放在void f(double)
模板void entry(T)
化函数之前,代码将调用正常函数,基本上输出:
正常f(双)
因此,我的另一个问题是:为什么订单在这个特定的例子中很重要?