有人告诉我,一个类的内存始终具有相同的结构:
因此,如果我有指向类成员的指针,我可以以某种方式计算指向该类的指针吗?
class num
{
public:
num() {}
int a;
int b;
};
int* ptr; // we have the pointer to num.b
num* number; // we want the pointer to num
仅使用“ ptr”就能获得“数字”吗?像这样:
num temp;
int diff = (void*)&temp - (void*)&temp.b;
num target;
int* ptr = &target.b;
num* number = (num*)((void*)ptr + diff);
答案 0 :(得分:4)
理论上,如果一切都只是一堆字节,那么是的。
但是没有。
C ++是一种抽象。一个非常复杂的。您的编译器也确实很复杂。它喜欢进行假设(使用标准规定的保证和约束),以便从程序的抽象描述中产生最佳的代码。
恐怕在不同对象之间进行指针算术运算是不被允许的事情之一。如果尝试的话,可能会导致怪异。