假設下面的代碼與基本結構基指針如何能夠知道派生類實例中基礎構件的內存位置?
struct A {int aMember};
struct B {bool bMember};
struct C {double cMember};
struct BA : B, A {};
struct CB : C, B {} ;
void test(B *base) {
bool retrieved = base->bMember;
}
在這裏,測試功能能夠被傳遞的指針B,BA,或CB的一個實例。底層成員「bMember」的檢索是如何以低級方式實現的?據推測,該成員不能保證位於每個派生類型的傳遞對象收件人的給定偏移處。總之,對於任何給定派生類型,B的成員片段在哪裏「已知」如何?這是否在運行時通過某些與使用繼承的對象和類關聯的元數據來實現?
如果已經發布了一個簡單的解釋,我非常抱歉。我只是不知道如何將我的搜索短語返回給相關答案。
謝謝!
https://isocpp.org/wiki/faq/classes-and-objects#layout-obj這可能有幫助。 –
因爲它們是基本指針。他們指向基礎對象。派生對象中的內容完全不相關。 – EJP