详见《C++Primer》[第五版]719页
如果继承路径上没有和虚基类成员重名的成员,则不存在二义性,因为我们仅能访问到虚基类成员。
当访问仅有一条继承路径上含有和虚基类成员重名的成员,也不存在二义性。派生类的成员的优先级比基类的成员高,所以说如果没有用名字空间强制访问虚基类的同名成员的话,访问访问的就是派生类的重名成员。
当访问含有两条及以上路径上含有和虚基类成员重名的成员时就会产生二义性。
例如:
B中含有成员x,D1,D2均 虚继承 B,D继承了D1,D2,则:
- 如果D1,D2中均不含成员x,则不存在二义性,D.x访问的是B中的x
- 如果D1中含有x,D2中不含有,则不存在二义性,D.x访问的是D1.x
- 如果D1,D2中均含有x,则产生二义性。