Quand utiliser reinterpret_cast en C++ et en quoi diffère-t-il des autres casts ?
Bonjour, collègues ! J'étudie le C++ et je maîtrise déjà assez bien static_cast et dynamic_cast. Mais reinterpret_cast me pose des questions et même de la peur. Je comprends que c'est un cast "malveillant" qui réinterprète simplement les bits, mais quand faut-il vraiment l'utiliser ?
J'ai vu quelqu'un faire ceci dans du code :
```cpp
int* p = new int(42);
char* cp = reinterpret_cast(p);
```
Mais pourquoi ? On pourrait simplement prendre l'adresse et travailler avec. Ou encore cet exemple avec un cast de pointeur de fonction :
```cpp
typedef void (*FuncPtr)();
FuncPtr f = reinterpret_cast(0x12345678);
```
Est-ce légal ? Il me semble que reinterpret_cast est une sorte de hack qui viole le système de types. Mais je sais qu'il est dans la norme, donc il a des utilisations légitimes.
Dites-moi, s'il vous plaît, dans quelles situations réelles reinterpret_cast est-il un choix correct et sûr ? Quand son utilisation est-elle justifiée, et quand vaut-il mieux utiliser static_cast ou d'autres casts ? Et avec