对于static_cast
,是不是除非有内置的类型转换函数,否则不能使用static_cast
进行转换。但是你可以为一个类型做一个reinterpret_cast
,考虑到返回类型是有效的。
int main()
{
WORD word;
HWND hwnd = static_cast<HWND>(word); // error
HWND hwnd = reinterpret_cast<HWND>(word); // ok, considering a valid handle is returned.
}
与 reinterpret_cast 不同,使用 static_cast 完成的显式类型转换是否需要转换函数?
最佳答案
reinterpret_cast
只允许您转换完全不相关的类型。它只是将内存块视为另一种类型。所以使用它是非常不安全的,因为它不会给你任何编译或运行时错误,只会导致(通常)崩溃
static_cast
提供对强制转换有效性的编译时检查。如果一种类型不能被视为另一种类型,则 static_cast
会在您尝试强制转换时给出编译时错误。
它在类型之间进行隐式转换(例如 int 到 float,或指向 void* 的指针),它还可以调用显式转换函数(或隐式转换函数)。
所以你可以说它可以进行隐式转换,其中存在隐式转换内置函数。如果混淆,它通常被认为是 c 风格转换的替代品。
关于c++ - 显式类型转换的要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7246414/