C ++允许我们使用模板编写通用函数。它还具有功能重载的功能。
我写了以下程序:
#include <iostream>
using namespace std;
template <typename T>
void test(T a)
{
cout<<"using template";
}
void test(int a)
{
cout<<"using int";
}
int main()
{
test(10);
return 0;
}
它的出局是:
using int
我想知道选择特定方法的基础是什么?
答案 0 :(得分:1)
非模板函数是比函数模板更好的匹配。
参考(C ++标准草案N3337):
13.3.3最佳可行功能
...
鉴于这些定义,如果对于所有参数i,可行函数F1被定义为比另一个可行函数F2更好的函数,ICSi(F1)不是比ICSi(F2)更差的转换序列,然后
...
- F1是非模板函数,F2是函数模板特化,或者,如果不是,
- F1和F2是功能模板专精,F1的功能模板更专业 根据14.5.6.2中描述的偏序规则,比F2的模板。
答案 1 :(得分:0)
其明显的行为,实际的param与正式的匹配。就模板而言,编译器不知道T是什么类型,也调用模板函数有不同的语法。