考虑这段代码:
struct A
{
virtual void foo() {};
};
struct B : private A {};
struct C : private A {};
struct D : A, B, C {};
int main()
{
D d;
d.foo(); // Error: ambiguous access of foo (is it A::foo(), B::foo() or C::foo() ?)
}
编译器正在考虑d.foo()
一个模棱两可的调用,尽管两者d.B::foo()
和d.C::foo()
对用户来说都是不可访问和隐藏的。唯一有效的调用应该是d.A::foo()
,为什么编译器会模棱两可?