gpt4 book ai didi

c++ - C++ 如何选择调用哪个重载函数?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:57:56 24 4
gpt4 key购买 nike

假设我有三个类:

class X{};
class Y{};
class Both : public X, public Y {};

我的意思是说我有两个类,然后是扩展这两个类的第三个类(多重继承)。

现在假设我在另一个类中定义了一个函数:

void doIt(X *arg) { }
void doIt(Y *arg) { }

我用两者的实例调用这个函数:

doIt(new Both());

这会导致编译时错误,指出函数调用不明确。

除了这种情况,还有哪些情况会导致 C++ 编译器认为调用不明确并抛出错误(如果有)?编译器如何确定这些情况是什么?

最佳答案

很简单:如果它有歧义,那么编译器就会给你一个错误,迫使你选择。在您的代码片段中,您会得到一个不同的错误,因为 new Both() 的类型是指向 Both 的指针,而 doIt() 的两个重载 按值接受它们的参数(即它们不接受指针)。如果您将 doIt() 更改为分别采用 X*Y* 类型的参数,编译器会给您一个关于函数不明确的错误打电话。

如果你想显式地调用一个或另一个,你可以适本地转换参数:

void doIt(X *arg) { }
void doIt(Y *arg) { }
Both *both = new Both;
doIt((X*)both); // calls doIt(X*)
doIt((Y*)both); // calls doIt(Y*)
delete both;

关于c++ - C++ 如何选择调用哪个重载函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/385556/

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