1. 程式人生 > >C++學習之路(十):虛繼承引入的執行效率

C++學習之路(十):虛繼承引入的執行效率

存取 ++ 移位 繼承 模型 虛函數 必須 執行 amp

這篇文章不知道取啥名字了,暫且這樣叫,直接看場景就明白了。節選自《深度探索C++對象模型》

Point3d origin, *pt = &origin;

(1)origin.x = 0;

(2)pt->x = 0

上述兩種代碼執行結果是一樣的,但是在執行效率上是否存在差異?

(1)如果Point3d是一個普通結構體,普通類,普通單一繼承或多繼承,則成員x的執行效率都完全相同,因為x在類中的位置偏移,在編譯時期就固定了(沒有引入虛函數)。(2)如果Point3d是虛繼承自一個基類,則pt不能夠在編譯時被確定指向哪一種類類型,即不能夠在編譯時期確定x的偏移位置。所以這個存取操作必須延遲到執行器,由一個額外的間接引導才能解決,執行效率慢於(1)

C++學習之路(十):虛繼承引入的執行效率