C++ 当重载方法将模板类作为参数时会发生什么
C++允许我们使用模板编写通用函数。它还具有函数重载的特点。 我编写了以下程序:C++ 当重载方法将模板类作为参数时会发生什么,c++,templates,overloading,C++,Templates,Overloading,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);
#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;
}
我想知道选择特定方法的依据是什么?它的明显行为,实际参数与形式匹配。就模板而言,编译器不知道什么类型是t,对模板函数的调用也有不同的语法。非模板函数比函数模板更匹配 参考(C++标准草案N3337): 13.3.3最佳可行功能 给定这些定义,如果对于所有参数i,ICSi(F1)不是比ICSi(F2)更差的转换序列,则可行函数F1被定义为比另一个可行函数F2更好的函数,然后 -F1是非模板函数,F2是函数模板专用化,如果不是 -F1和F2是函数模板专用化,F1的函数模板更专用 根据14.5.6.2中所述的偏序规则,F2的模板
因此,在运行时,它首先找到具有精确数据类型的原型。如果它没有找到它,那么它会选择参数类型t。对吗?错,如果参数与调用的函数相匹配(数值类型之间存在弱类型检查),运行时甚至编译器都不知道t应该是int,您必须在函数调用中显式地提到t是int。
using int