以下代码来自this帖子:

struct Base
{
    Base( int ) {}
    void foo() const {}
};

struct Intermediate: Base
{
    Intermediate( int x )
        : Base( x )
    {}
};

struct ResolvableBase: Base
{
    ResolvableBase( int x ): Base( x ) {}
};

struct Derived: Intermediate, ResolvableBase
{
    Derived( int x )
        : Intermediate( x )
        , ResolvableBase( x )
    {}
};

int main()
{
    Derived o( 667 );
    o.ResolvableBase::foo();    // OK.
}

该代码的作者似乎声称o具有Base的两个子对象。为什么这是两个子对象的情况,而不是模棱两可的情况(在这种情况下,gcc会警告不可访问的基类)?另外,如果有两个子对象,则在foo中调用哪个子对象的main

最佳答案



因为有两个不同的子对象,所以我们可以根据需要分别处理。



正如您明确要求的那样,其中一个属于ResolvableBase:

o.ResolvableBase::foo();    // OK.
  ~~~~~~~~~~~~~~ ← Here

10-02 02:11