我对reinterpret_cast
vs 的适用性感到困惑static_cast
.从我读到的一般规则是使用静态转换,当类型可以在编译时解释,因此这个词static
.这是C++编译器内部用于隐式转换的转换.
reinterpret_cast
s适用于两种情况,将整数类型转换为指针类型,反之亦然,或将一种指针类型转换为另一种指针类型.我得到的一般想法是不可移植的,应该避免.
我有点困惑的地方是我需要的一种用法,我从C调用C++并且C代码需要保持C++对象,所以基本上它拥有一个void*
.什么演员应该用于在void *
类型和类型之间进行转换?
我看过两者的用法static_cast
和reinterpret_cast
?虽然从我读过的内容看起来似乎static
更好,因为演员阵容可以在编译时发生?虽然它说用于reinterpret_cast
从一种指针类型转换为另一种指针类型?
在WinAPI上,HANDLE
类型定义为a void*
,因此在64位应用程序上,HANDLE
值的范围可以0
是18446744073709551615
.但这在实践中是真的吗?有没有文件说明这样的整体范围HANDLE
?
例如,如果有人希望将其存储HANDLE
为int32_t
完全正常的32位应用程序,但在64位应用程序上则存在疑虑.