Conversions de type (casts)

Conversions implicites (coercion)

  • promotion numérique : c'est la conversion automatique d'un char en int ou d'un float en double par exemple.
  • conversion numérique : c'est la transformation d'un float en int (ou inversement)

Exemples :

int n{2}; // char -> int
double d{3}; // int -> double

Conversion explicites (casts)

Il y a 5 types de conversions explicites en C++ :

  • static_cast : essaie de transformer un type en un autre
  • const_cast : retire l'attribut const (à utiliser avec précaution)
  • dynamic_cast : transtypage sûr entre des classes (requière RTTI)
  • reinterpret_cast : convertit n'importe quoi en n'importe quoi (ce n'est pas vraiment un cast, cet opérateur indique juste au compilateur d'interpréter différement le contenu en mémoire).
  • et enfin le cast “dans le style du C” qui se comporte de la façon suivante :
    • const_cast si possible
    • sinon static_cast
    • sinon static_cast suivi de const_cast
    • sinon reinterpret_cast
    • sinon reinterpret_cast suivi de const_cast

De façon générale, static_cast et dynamic_cast sont d'un usage sûr. const_cast est à employer avec beaucoup de précautions. reinterpret_cast encore plus et le cast “dans le style du C” devrait être évité autant que possible.

Les casts s'emploient de la façon suivante :

double d{2.6};
int n = static_cast<int>(d);  // conversion du double en int