以下作品:
void* p = reinterpret_cast<void*>(0x1000);
但是看起来“不正确/不安全”,例如。 0x1000是一个
int
甚至不是uintptr_t
,我可以解决这个问题,但是有没有更好/更安全的转换方法? 最佳答案
0x1000
是int
,在reinterpret_cast<void*>(0x1000)
中,编译器发出符号扩展指令(此处的sign为0)或带有立即操作数的纯寄存器加载指令,以使值与void*
一样宽。
由于许多原因,编译器可能无法知道0x1000
是否代表有效地址,因此它必须遵守并假定它是有效地址。
当前,使用reinterpret_cast
转换表示指针地址的整数是当前的实践。