gpt4 book ai didi

c++ - 理解 void* 对 intptr_t 和 uintptr_t

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:06:41 24 4
gpt4 key购买 nike

这是我正在测试的代码:

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

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

最佳答案

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

因为进行这些转换从根本上来说是不安全的,所以 C++ 要求您使用 reinterpret_castintptr_tuintptr_t 以及指针类型进行相互转换.

如果您所做的只是存储“指向某物的指针”,并且假设该指针不是函数指针或成员函数指针,您可以将其强制转换为 void* .该转换保证有效,并且从 void* 转换回原始类型只需要一个 static_cast 并且保证安全。

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

关于c++ - 理解 void* 对 intptr_t 和 uintptr_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40941825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com