c – 为什么static_cast为同一个对象提供不同的内存位置?
发布时间:2020-12-16 10:44:27 所属栏目:百科 来源:网络整理
导读:我的代码 class Parent { int a; };class Child { int b; };struct GrandChild : public Parent,public Child { int a,b,c; };int main() { GrandChild GC; std::cout "GrandChild's address is at : " GCendl; std::cout "Child's address is at : " static
我的代码
class Parent { int a; }; class Child { int b; }; struct GrandChild : public Parent,public Child { int a,b,c; }; int main() { GrandChild GC; std::cout << "GrandChild's address is at : " <<&GC<<endl; std::cout << "Child's address is at : " <<static_cast<Child*>(&GC)<<endl; std::cout << "Parent's address is at : " <<static_cast<Parent*>(&GC)<<endl; } 输出: GrandChild's address is at : 0077F6F8 Child's address is at : 0077F6FC Parent's address is at : 0077F6F8 为什么在static_cast之后内存位置有如上所述的不一致? 解决方法
GrandChild来自父母和孩子.因此,内存中的GrandChild对象包含其内存中的Parent对象和Child对象.
& GC本身返回GrandChild对象的内存地址作为一个整体 static_cast< Parent *>(& GC)返回GrandChild对象内Parent部分的起始地址. static_cast< Child *>(& GC)返回GrandChild对象内Child部分的起始地址. 在您的情况下,Grandchild首先从Parent派生,因此Parent部分在GrandChild的内存块的开头对齐.然后Child部分跟在Parent部分之后.以下是一个说明: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |