Quelle est la différence entre static_cast, dynamic_cast, reinterpret_cast et le cast de style C en C++ ?
Bonjour à tous ! Je viens de commencer à apprendre le C++ et je n'arrive pas à comprendre les casts de types. Dans les livres et sur les forums, on parle de `static_cast`, `dynamic_cast`, `reinterpret_cast` et aussi de l'ancien cast de style C entre parenthèses. Quand j'écrivais en C, je faisais simplement `(int)myDouble`, et tout fonctionnait. Mais en C++, on me dit que c'est une mauvaise pratique et qu'il faut utiliser le style C++.
Par exemple, j'ai une hiérarchie de classes :
```cpp
class Base { public: virtual ~Base() {} };
class Derived : public Base { public: void foo() {} };
```
Je veux convertir `Base*` en `Derived*`. Apparemment, je peux écrire `(Derived*)basePtr`, et ça compile. Mais quel est le meilleur choix ? J'ai entendu dire que `dynamic_cast` peut retourner `nullptr` si le cast échoue, alors que `static_cast` ne le fait pas. Et il y a aussi `reinterpret_cast`, qui casse tout.
Aidez-moi à comprendre : quel cast utiliser et quand ? Y a-t-il des cas où le cast de style C est encore acceptable ? Et pourquoi a-t-on créé autant de casts différents en C++ ?