加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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部分之后.以下是一个说明:

structure

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读