[英]How to assign min of uint32_t::max and uint64_t in type safe manner?
[英]How can I store a uint32_t or uint64_t in a void pointer
我有一个 uint32_t(将来可能会变成 uint64_t)变量。 我使用的其中一个库中有一个 function,它允许向它传递一个空指针。 如何将 uint32_t 传递给此 void 指针:
uint32_t myEntity = 1242242;
// not a pointer; so, error about invalid conversion
actor->userData = static_cast<void *>(myEntity);
我不能使用指向此原始类型的指针,因为该值可能来自参数或类似参数,并且由于它是一个 uint,所以我不想为它使用引用。
有什么方法可以将这个值设置为空指针吗? 这样,我就可以以相同的方式检索它,而无需在堆中创建值以使其正常工作。 否则,我将需要管理对象的销毁,以免造成 memory 泄漏。
对于您正在尝试的内容,您需要使用reinterpret_cast
而不是static_cast
,例如:
uint32_t myEntity = 1242242;
actor->userData = reinterpret_cast<void*>(myEntity);
uint32_t myEntity = reinterpret_cast<uint32_t>(actor->userData);
由于您提到该值将来可能会更改为uint64_t
,请注意在这种情况下您必须将代码编译为 64 位可执行文件(如果您还没有),否则void*
不会很大超过最高uint32_t
值的足够值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.