gpt4 book ai didi

c++ - 关于函数重载的查询

转载 作者:行者123 更新时间:2023-12-01 14:36:37 25 4
gpt4 key购买 nike

当使用同名函数时,参数列表必须不同(参数类型或使用的参数数量)。我只是在练习这个概念。我写了下面的代码。

   #include <iostream> 
int myFunction(int n)
{
return 2*n;
}
float myFunction(float n)
{
return 3*n;
}
int main()
{
int x=myFunction(3);
std::cout << x;
return 0;
}

我以为我会得到错误,因为编译器会混淆使用哪个 myFunction,因为我直接传递值 3 而没有将它存储在特定类型的变量中。但是我得到了输出 6。所以我尝试了以下代码。

   #include <iostream> 
int myFunction(int n)
{
return 2*n;
}
float myFunction(float n)
{
return 3*n;
}
int main()
{
float x=myFunction(3.3);
std::cout << x;
return 0;
}

因为前一个工作正常,我认为这也可以工作,因为 3.3 不是整数,所以很清楚调用哪个,但这次我得到编译器错误,说它不明确。

所以我怀疑为什么第一个代码有效但第二个代码无效。

最佳答案

调用过程中选择重载的过程称为overload resolution .给定参数类型,编译器选择 best viable function来自候选列表 - 可以用最少数量的促销和隐式转换调用的候选列表。

在第一种情况下,第一个 myFunction(int) 需要对 int 参数 (3) 进行 0 次转换,而第二个需要一次转换(int -> float),因此选择第一个作为最佳候选者。

在第二种情况下,double 参数 (3.3) 需要转换为 intfloat,所以没有明确的赢家,因此这个决定是模棱两可的。

修复可能是使用 float 参数 (3.3f) 或将 myFunction(float) 更改为 myFunction(double )

关于c++ - 关于函数重载的查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63086806/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com