gpt4 book ai didi

c++ - VS 2010 : 2 overloads have similar conversions

转载 作者:太空狗 更新时间:2023-10-29 20:15:42 25 4
gpt4 key购买 nike

我不明白这里发生了什么

class A{};
class B : A {};

void func(A&, bool){}
void func(B&, double){}

int main(void)
{
B b;
A a;
bool bo;
double d;

func(b, bo);
}

编译时,Visual 2010 在 func(b, bo); 行给我这个错误

2 overloads have similar conversions
could be 'void func(B &,double)'
or 'void func(A &,bool)'
while trying to match the argument list '(B, bool)'

我不明白为什么 bool 参数不足以解决重载问题。我看过this question ,并且正如接受的答案中所指出的, bool 应该更喜欢 bool 重载。在我的例子中,我发现第一个参数不足以选择好的函数,但为什么第二个参数不能解决歧义?

最佳答案

重载规则比您想象的要复杂一些。您分别查看每个参数并选择最匹配的参数。然后,如果恰好有一个重载为每个参数提供最佳匹配,那就是被调用的重载。在示例中,第一个参数的最佳匹配是 func 的第二个版本,因为它只需要将 B 转换为 B&func 的另一个版本需要将 B 转换为 B& 然后将 B& 转换为 A& .对于第二个参数,第一个版本的 func 是最匹配的,因为它不需要转换。第一个版本对第二个参数有最佳匹配,但对第一个参数没有最佳匹配,因此不予考虑。同样,第二个版本对第一个参数有最佳匹配,但对第二个参数没有最佳匹配,因此不予考虑。现在没有 func 的版本,调用失败。

关于c++ - VS 2010 : 2 overloads have similar conversions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12095205/

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