在尝试使用luaBind-style类绑定系统时,我发现在编译为64位应用程序时,传递指向成员变量的指针似乎无法正常工作。具体来说:
class Foo {
int a;
int b;
};
字符串
对于上面的类,32位的getting &Foo::b将返回(如预期的那样)0x 0000004。64位的相同调用返回0xCCCCCC 0000004,这是32位的正确和32位的WTF。
我的第一个想法是这是编译器中的一个错误(我在Vista 64 Business上使用Visual Studio 2005 SP1),但对于一个自豪地声称64位兼容性的IDE来说,这似乎是一个相当大的错误。谷歌搜索没有发现任何问题(但我可能使用了错误的术语。成员变量指针?有人愿意纠正我吗?),所以我很好奇这是只是我还是一个更普遍的问题。
2条答案
按热度按时间zzwlnbp81#
尝试打印
sizeof(&Foo::b)
。IIRC,在64位VS 2005中,指向成员的指针可以占用4或12个字节(取决于虚拟/多重继承),但IDE总是显示8个字节(恕我直言,这是IDE中的一个错误)。
mccptt672#
指向成员的指针并不一定像你想象的那么简单。
字符串
你真的不应该“期待”指向成员的指针中有任何特定的位模式。它们可能指向一个形实转换程序,也可能是一个偏移量,谁知道呢。同样在64位的情况下,你确定指向成员的指针在打印时是64位的吗?指向成员的指针不必和其他指针大小相同(通常不是)。
这个article也可能是englighting,尽管它主要处理指向成员函数的指针。