众所周知,当我们使用普通函数在模板函数中进行函数重载时,如果编译器获得与普通函数的完全匹配,fun()
它将调用普通函数fun()
并忽略template fun()
。但是在下面的C ++代码中,当我运行代码时,它将调用模板函数而不是普通函数。为什么?
码
#include<iostream>
using namespace std;
template<class T1, class T2>
void fun(T1 x, T2 y){
cout << "TEMPLATE FUNCTION : " << x << " | " << y << endl;
}
void fun(int a, float b){
cout << "ORDINARY FUNCTION : " << a << " | " << b << endl;
}
int main(){
fun(3, 4.7);
return 0;
}
输出量
TEMPLATE FUNCTION : 3 | 4.7
在此通话中:
fun(3, 4.7);
第二个参数4.7
是double
。如您在问题中提到的,仅当参数完全匹配时才调用非模板函数。由于非模板函数期望float
第二个参数为a ,因此需要从转换double
为float
。这不是完全匹配,因此选择了模板。
如果要选择非模板,则将afloat
作为第二个参数传递:
fun(3, 4.7f);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句