[英]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>
我应该使用 reinterpret_cast ......这是正确的吗?
正确......前提是首先需要这样的演员,这是罕见的。
.. 因为这给了我一个编译时检查整数变量是否足够大以适合一个指针。 那是对的吗?
不正确。 与 c 风格转换相比,没有额外的警告保证。 Reinterpret_cast 是首选,因为它更明确并且不允许抛弃 const。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.