这篇文章不知道取啥名字了,暂且这样叫,直接看场景就明白了。节选自《深度探索C++对象模型》
Point3d origin, *pt = &origin;
(1)origin.x = 0;
(2)pt->x = 0
上述两种代码执行结果是一样的,但是在执行效率上是否存在差异?
(1)如果Point3d是一个普通结构体,普通类,普通单一继承或多继承,则成员x的执行效率都完全相同,因为x在类中的位置偏移,在编译时期就固定了(没有引入虚函数)。(2)如果Point3d是虚继承自一个基类,则pt不能够在编译时被确定指向哪一种类类型,即不能够在编译时期确定x的偏移位置。所以这个存取操作必须延迟到执行器,由一个额外的间接引导才能解决,执行效率慢于(1)