上面代码中,类 C 中的 q() 定义优先于类 B 中的 q() 定义,因为类 C 从类 B 派生而来。因此,F 中如果直接使用了 q() ,那么它表示的 C::q() 。另一方面,对于类 C 和 类E,任何一个类中的 omg() 的定义都不优先于另一个,因为 C 和 E 都不是对方的基类。所以,在 F 中使用非限定的 omg() 将导致二义性。
虚二义性规则与访问规则无关,也就是说,即使 E::omg() 是私有的(不能在类 F 中直接访问),但使用 omg() 仍将导致二义性。同样,即使 C::q() 是私有的,它也将优先于 D::q()。在这种情况下,可以在类 F 中调用 B::q(),如果不这样限定,那么就意味着调用不可访问的 C::q() 。