阿海,海,
我想知道是否可以执行以下操作:
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/