我正在学习C ++中的函数重载,我对函数匹配有疑问。在我得到的代码下运行
error C2668: 'function' : ambiguous call to overloaded function
。
此link中明确回答了我为什么会出错的原因。
数字1.2和2.2的类型为double
。尽管还有一个疑问,我对此有没有回答。
当我尝试调用 function(1.2,2)或 function(1,2.2)时,它正在打印为“ int函数” 。为什么它没有给出与上述相同的错误。
代码:
void function(int y,int w)
{
printf("int function");
}
void function(float y,float w)
{
printf("float function");
}
int main()
{
function(1.2,2.2);
return 0;
}
答案 0 :(得分:1)
当我尝试调用
function(1.2,2)
或function(1,2.2)
时,它正在打印为“ int函数”。为什么它没有给出与上述相同的错误。
因为根据overload resolution void function(int y,int w)
的规则比void function(float y,float w)
更好的匹配,因此没有歧义。
调用function(1.2,2)
和function(1,2.2)
都具有一个参数int
,并且与void function(int y,int w)
的一个参数完全匹配,因此只有一种类型转换是必需的,double
至int
。另一方面,void function(float y,float w)
需要两次从int
到float
的转换和从double
到float
的转换,这就是使用int
重载的原因。 / p>