所以我在一次采访中遇到了这个问题并对重载规则感到非常困惑,你能否指点我在编译时的解释。
重载功能:
int mult(int a, int b)
{
cout<<"int "; return a*b;
}
long mult(long a, long b)
{
cout<<"long "; return a*b;
}
float mult(float a, float b)
{
cout<<"float "; return a*b;
}
然后是电话:
long m = mult(5.2,7);
cout<<"result "<<m<<endl;
float f = mult(5,7.2);
cout<<"result "<<f<<endl;
这些功能之间的选择有哪些规则?
答案 0 :(得分:3)
您在https://en.cppreference.com/w/cpp/language/overload_resolution
上有很好的描述这里发生的是根据最少的转化次数选择了多重。
long m = mult(5.2,7);
long m
完全无关。该调用为mult(double, int)
,因此现在要找到最适合此功能的规则,规则会说找到应用了最少转换的功能。 (请参见最佳可行功能)。
这相当于mult(int, int)
只需要一次转换。所有其他功能都需要两次隐式转换才能匹配。
第二个调用也使用相同的参数。
例如,这些规则很容易使通话变得含糊不清
如果添加了
float mult(int a, float b);
混合后,您的程序将无法编译。通话
float f = mult(5, 7.2);
它也是一次隐式转换,与mult(int, int)
函数一样含糊不清。