何时在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或其他类型转换?