繁体   English   中英

了解void *对intptr_t和uintptr_t

[英]Understanding void* against intptr_t and uintptr_t

这是我正在测试的代码:

int value = 0;
void* addyvoid = static_cast<void*>(&value); // C++-style cast.

它工作得很好,但我可以使用uintptr_t / intptr_t 但是,正如人们在这里所说的那样因为它们太大了,所以它们不适合拿指针。 那么,这是真的吗? 但是,如果是,使用void*保持指针会更好,但会丢失数据吗?

intptr_tuintptr_t的目的是在某些应用程序中,实际上你需要对指针值进行某种数值计算,可能是通过翻转单个位,也许是通过对它们进行异或运算等。在这些情况下,当你需要使用时指针的数值intptr_tuintptr_t是整数类型(如果它们存在)保证足够大以容纳任何指针。 例如, int不是这样,因为未指定int相对于指针大小的大小。

因为进行这些转换从根本上说是不安全的,所以C ++要求你使用reinterpret_cast来转换intptr_tuintptr_t以及指针类型。

如果你正在做的就是存储“指向某个东西的指针”,并且只要指针不是函数指针或成员函数指针,你就可以将它转换为void* 该演员阵容保证有效,从void*转换回原始类型只需要static_cast并保证安全。

intptr_tuintptr_t的大小不是避免它们的好理由。 它们仅适用于不同的应用。 如果需要对指针进行数值计算,请使用这些类型。 否则,如果您只需要存储“指向某个东西的指针”,请使用void*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM