Avatar ·

何时在C++中使用reinterpret_cast以及它与其他类型转换的区别

大家好!我正在学习C++,已经对static_cast和dynamic_cast有了不错的了解。但reinterpret_cast让我感到困惑甚至害怕。我知道这是一种“邪恶”的类型转换,只是重新解释比特位,但什么时候真正需要用到它呢? 我看到有人在代码中这样做: ```cpp int* p = new int(42); char* cp = reinterpret_cast(p); ``` 但为什么呢?其实可以直接取地址并操作。还有另一个例子,将指针转换为函数指针: ```cpp typedef void (*FuncPtr)(); FuncPtr f = reinterpret_cast(0x12345678); ``` 这合法吗?我觉得reinterpret_cast像是一种破坏类型系统的hack。但我知道它在标准中存在,所以一定有合法的用途。 请告诉我,在哪些实际场景中reinterpret_cast是正确且安全的选择?什么时候使用它是合理的,而什么时候应该使用static_cast或其他类型转换?