有没有人能告诉我为什么在MSVC、clang和g++中,将nullptr
分配给类型为Class::*
的数据成员指针的内部表示为-1? 对于64位系统,最好使用(size_t)1 << 63
,因为如果您以这种方式使用nullptr
成员指针,则一定会触碰内核内存并导致崩溃,因此这将是一个很好的调试工具。
-1背后是否存在更深的原因?
示例:
struct X
{
int x, y;
};
using member_ptr = int X::*;
member_ptr f()
{
return nullptr;
}
使用g ++编译器将产生以下二进制结果:
movq $-1, %rax
ret