繁体   English   中英

将指针转换为整数时,我应该使用 reinterpret_cast 吗?

[英]When converting pointers to integers, should I be using reinterpret_cast?

我的理解是,当从指针转换为整数时,我应该使用 reinterpret_cast,因为这样可以在编译时检查整数变量是否足够大以适合指针。 那是对的吗?

与只是在我没有保证的情况下进行转换并且在从 32 位环境移动到 64 位环境时最终可能会截断地址不同?

1. reinterpret_cast表示重新解释底层位模式。 这意味着 C 中的显式转换,例如:

void *vptr; 
int *iptr = (int *)(vptr);

你应该知道 reinterpret_cast 是不安全的,转换的正确性由你自己决定。

如果您需要类型安全转换,请使用static_cast ,这意味着类型之间的隐式转换或类型安全转换。 常用于数值类型之间

2.可能会导致截断,使用精确字长的int类型是合适的。 int64_t包含<cstdint>

  1. 你永远不应该这样做(这种情况非常罕见的例外)。 请解释为什么你需要这个。
  2. 指针在特定平台上具有固定大小。
  3. 标准提供与每个平台uintptr_t / intptr_t的指针大小相匹配的整数类型定义。

我应该使用 reinterpret_cast ......这是正确的吗?

正确......前提是首先需要这样的演员,这是罕见的。

.. 因为这给了我一个编译时检查整数变量是否足够大以适合一个指针。 那是对的吗?

不正确。 与 c 风格转换相比,没有额外的警告保证。 Reinterpret_cast 是首选,因为它更明确并且不允许抛弃 const。

暂无
暂无

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

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