Avatar ·

Quand utiliser static_cast, dynamic_cast, const_cast et reinterpret_cast en C++ ?

Salut ! Je viens de commencer à apprendre le C++ et je n'arrive pas du tout à comprendre les conversions de types. Apparemment, il y a quatre opérateurs différents : static_cast, dynamic_cast, const_cast et reinterpret_cast. Mais quand utiliser lequel — c'est le bazar complet. Par exemple, je veux convertir un double en int. On peut simplement écrire (int)value, comme en C ? Pourquoi static_cast est-il nécessaire ? Ou encore cette situation : j'ai une hiérarchie de classes, et je veux convertir un pointeur sur une classe de base en un pointeur sur une classe dérivée. J'ai entendu dire qu'on utilise dynamic_cast pour cela, mais il ne fonctionne qu'avec des fonctions virtuelles. Et s'il n'y en a pas ? Peut-on utiliser static_cast ? const_cast me trouble aussi. Je sais qu'il peut "enlever" la constance. Mais n'est-ce pas dangereux ? Et pourquoi aurait-on besoin de modifier un objet constant ? Et le plus effrayant...