多重继承情况下的模糊函数调用

问题描述 投票:0回答:1
class base1
{
public: 
    void printing()
    {
        cout << "Using base1" << endl;
    }
};

//base2 has a private version printing function 

class base2
{
    void printing()
    {
        cout << "Using base2" << endl;
    }
};

class derived :public base1, base2
{
    
};

int main()
{
    derived* d = new derived(); 
    d->printing(); 
}

IDE 告诉我该调用不明确,因为“C++ 在确定名称解析时不考虑函数的访问说明符。”

这似乎与我在这里读到的内容相冲突:https://en.cppreference.com/w/cpp/language/overload_resolution#Viable_functions

详细来说,重载决策通过以下步骤进行:

构建候选函数集。
将集合修剪为仅可行的函数。
分析该集合以确定单个最佳可行函数(这可能涉及隐式转换序列的排名)。

所以,这里的“可行”只是意味着某种类型检查,但它不会考虑该函数是否可访问甚至

=delete
'd?

c++ function inheritance ambiguous
1个回答
0
投票

所以,这里的“可行”仅意味着某种类型检查,但它不会考虑该函数是否可访问甚至=删除?

是的,两者与函数对于函数调用是否“可行”无关。该术语是一个技术术语,您不应仅根据其在一般英语中的含义来假设其含义。 但是,在您的情况下,甚至不是重载解析导致由于模糊性而导致失败,而是在此之前的一步。在重载解析之前,有一个名称查找来找出

d->printing

的名称。它可以是函数或函数模板的重载集,或者例如成员变量(可能有

operator()
)。
名称查找本身已经是不明确的,因为名称是在多个基类中找到的。您甚至没有进入考虑函数调用的重载解析方面。

© www.soinside.com 2019 - 2024. All rights reserved.