函数重载的输出与预期不符

时间:2018-11-25 08:16:23

标签: c++ function overloading

我正在学习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;
 }

1 个答案:

答案 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)的一个参数完全匹配,因此只有一种类型转换是必需的,doubleint。另一方面,void function(float y,float w)需要两次从intfloat的转换和从doublefloat的转换,这就是使用int重载的原因。 / p>