c++ - 显式类型转换的要求

标签 c++ type-conversion

对于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/

相关文章:

c++ - 如何检查大型 C++ Linux 应用程序中的内存泄漏?

c++ - 通常,解引用指针表达式结果是引用类型吗?

type-conversion - 元组与元组

java - 将位数组值转换为二进制数字符串

python - python中的十六进制字符串类型转换

c++ - 如何为类编写转换为引用到数组的运算符?

c++ - 使用线程刷新opencv的问题

c++ - 函数参数的编译器优化

c++ - 如何使用 C++11 或 Boost 获取正则表达式匹配的长度?

java - Java 中的 C 数据类型