gpt4 book ai didi

c++ - 在 C++ 中,为什么指向类成员的指针包含偏移量而不是地址?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:03:42 26 4
gpt4 key购买 nike

通常指针包含地址。为什么指向类成员的指针包含偏移量?

谈论指向类数据成员的指针,而不是指向成员函数的指针。

最佳答案

指向类成员的指针不同于常规指针,因为它本身实际上并不指向内存中的单个位置。例如,如果您有此设置:

struct MyStruct {
int x;
int y;
};

int MyStruct::* ptr = &MyStruct::y;

那么指针 ptr 实际上并不指向内存地址,因为没有一个对象 MyStruct::y。相反,MyStruct 的每个实例都有自己的数据成员 y 拷贝。

C++ 标准并未规定指向成员的指针的实际实现方式,但常见的策略是让指向成员的指针存储从对象的基址到相关字段的偏移量(以字节为单位)。这样,当你写类似的东西时

MyStruct ms;
ms.*ptr = 137;

编译器可以生成这样的代码:“转到 ms 的基地址,向前跳过由存储在 ptr 中的值指定的字节数,然后写入 137 ”

关于c++ - 在 C++ 中,为什么指向类成员的指针包含偏移量而不是地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45333940/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com