为什么在重载区域函数时在波纹管代码的情况下会出现歧义

why ambiguous occured in the case of bellow code while overloading the area function

本文关键字:情况下 歧义 波纹管 区域 重载 函数 为什么 代码      更新时间:2023-10-16

我重载了面积函数。 像这样浮点面积(int v,int u(;浮点面积(浮点 R,浮点 S(;然后我用参数 2.3,4.4 调用了面积函数但是显示错误重载"面积(双倍,双倍("的调用不明确但我不明白模棱两可的原因是什么,因为很明显 2.3 和 4.4 是浮点型,然后调用第二个版本的区域浮点面积(浮点 R,浮点 S(;有人解释了此代码中出现歧义的原因

#include<iostream>
using namespace std;
float area(int v,int u)
{
    return 0*v*u;
}
float area(float r,float s)
{
    return r*s;
}
int main()
{
    cout << area(2.3,4.4);
    return 0;
}

区域调用中的参数类型为 double,而不是浮点型。编译器无法决定是否应将它们转换为浮点数或整数。以下内容将按预期工作:

cout << area(2.3f,4.4f);

在这种情况下,传递给面积的值是浮点数,而不是双精度值。