用非零值初始化void指针的正确(或最安全)方法?

dar*_*une 5 c++ void void-pointers c++17

以下作品:

void* p = reinterpret_cast<void*>(0x1000);
Run Code Online (Sandbox Code Playgroud)

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

Max*_*kin 5

0x1000 是一个int甚至不是uintptr_t,我可以解决这个问题,但是有没有更好/更安全的铸造方法

0x1000is int,并且在reinterpret_cast<void*>(0x1000)编译器中发出一个符号扩展指令(这里的符号是 0)或一个带有立即操作数的普通寄存器加载指令,使值与void*.

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

将表示地址的整数转换为指针reinterpret_cast是当前的做法。

  • @darune 那么 `reinterpret_cast&lt;void*&gt;(0x1000)` 就是你所需要的。 (2认同)