以下作品:

void* p = reinterpret_cast<void*>(0x1000);

但是看起来“不正确/不安全”,例如。 0x1000是一个int甚至不是uintptr_t,我可以解决这个问题,但是有没有更好/更安全的转换方法?

最佳答案


0x1000int,在reinterpret_cast<void*>(0x1000)中,编译器发出符号扩展指令(此处的sign为0)或带有立即操作数的纯寄存器加载指令,以使值与void*一样宽。

由于许多原因,编译器可能无法知道0x1000是否代表有效地址,因此它必须遵守并假定它是有效地址。

当前,使用reinterpret_cast转换表示指针地址的整数是当前的实践。

10-06 01:53