阿海,海,

我想知道是否可以执行以下操作:

class SomeClass
{
   int bar;
};

SomeClass* foo = new SomeClass();
int offset = &(foo->bar) - foo;

SomeClass* another = new SomeClass();
*(another+offset) = 3; // try to set bar to 3

只是好奇,
丹澳

最佳答案

我想从技术上讲它可能会解决。

但是,有几个问题。酒吧是私有(private)的。您正在混合使用不同类型的指针(指针算术依赖于指针类型:int * + 1和char * + 1的结果不同,因为int和char的大小不同)。

您是否也考虑过指向成员的指针:

#include <cassert>

struct SomeClass
{
   int bar;
};

int main() {
    int SomeClass::*mem_ptr = &SomeClass::bar;
    SomeClass foo;
    foo.*mem_ptr = 3;
    assert(foo.bar == 3);
}

关于c++ - 在C++类中进行指针数学运算: “legit”吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1390401/

10-12 20:57