gpt4 book ai didi

c++ - 对 C++ 中的覆盖感到困惑

转载 作者:行者123 更新时间:2023-11-30 02:20:29 26 4
gpt4 key购买 nike

所以我在面试中遇到了这个问题,对重载规则很困惑,你能指点我在编译时的解释吗。

重载函数:

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;

函数之间的选择有什么规则?

最佳答案

您在 https://en.cppreference.com/w/cpp/language/overload_resolution 上有很好的描述

这里发生的事情是根据最少的转化次数选择 mult。

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) 函数相同,因此不明确。

关于c++ - 对 C++ 中的覆盖感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49601421/

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