[英]Understanding void* against intptr_t and uintptr_t
intptr_t
和uintptr_t
的目的是在某些应用程序中,实际上你需要对指针值进行某种数值计算,可能是通过翻转单个位,也许是通过对它们进行异或运算等。在这些情况下,当你需要使用时指针的数值 , intptr_t
和uintptr_t
是整数类型(如果它们存在)保证足够大以容纳任何指针。 例如, int
不是这样,因为未指定int
相对于指针大小的大小。
因为进行这些转换从根本上说是不安全的,所以C ++要求你使用reinterpret_cast
来转换intptr_t
和uintptr_t
以及指针类型。
如果你正在做的就是存储“指向某个东西的指针”,并且只要指针不是函数指针或成员函数指针,你就可以将它转换为void*
。 该演员阵容保证有效,从void*
转换回原始类型只需要static_cast
并保证安全。
intptr_t
和uintptr_t
的大小不是避免它们的好理由。 它们仅适用于不同的应用。 如果需要对指针进行数值计算,请使用这些类型。 否则,如果您只需要存储“指向某个东西的指针”,请使用void*
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.