虚拟基类上的虚方法

soo*_*iln 8 c++ methods virtual multiple-inheritance

关于虚拟基类继承的一些令我困惑的事情......给出以下类:

class A
{
  virtual void foo() = 0;
}
class B : virtual A
{
  void foo() { /* do X */ }
}
class C : virtual A
{
  void foo() { /* do Y */ }
}
class D : B, C
{
}
Run Code Online (Sandbox Code Playgroud)

这会编译吗?如果是这样,以下代码的结果是什么:

D d;
A* a = &d;
a->foo();
Run Code Online (Sandbox Code Playgroud)

Sha*_*ath 7

它不应该编译,函数foo将是模糊的.由于A :: foo()是纯虚函数,因此必须解决歧义.