C++虚继承为什么虚基类位置无法编译时确定?

大多数讲到虚基类,都会说因为虚基类无法在编译时确定位置,所以需要一个虚基类表,存储相对与派生类的偏移位置。请问这个该怎么理解?为什么编译时无法确定位置?

没看到哪里说无法在编译时确定,虚基类唯一涉及的是二义性,而虚基类是共享的,只有一套,编译时生成与派生类的匹配指针,不再单纯的是this 指针

因为虚函数调用无法在编译时确定!在编译的时候编译器并不知道我们选择的是哪种类型的对象,如果不是虚函数,则采用早绑定,函数体与函数调用在程序运行之前就绑定了.当函数声明为虚函数时,编译器通过创建一个虚函数表存放虚函数的地址,在运行时,通过基类指针做虚函数调用时,编译器静态的插入能取得这个虚函数指针并在虚函数表中找到正确的函数版本.