Aller au contenu
Topos Uranos

Résumé

Un type ne fixe pas seulement combien d’octets occupe une donnée, mais aussi comment ses bits se lisent : le même octet est la lettre « A » pour un char et le nombre 65 pour un int. Cette leçon complète les types de base avec les caractères et les booléens, et étudie le passage d’un type à un autre : les conversions implicites, que le compilateur effectue sans qu’on les demande et qui peuvent perdre de l’information ; la conversion explicite avec static_cast ; et l’initialisation avec accolades, qui refuse les pertes. Elle se termine par les constantes, const et constexpr, qui transforment une intention (« cette valeur ne change pas ») en une garantie que le compilateur vérifie, et par les littéraux et auto, qui décident du type d’une valeur écrite dans le code source.

Objectifs d’apprentissage

  1. Utiliser le code numérique d’un caractère pour calculer avec lui, par exemple pour obtenir la valeur d’un chiffre lu comme caractère.
  2. Prédire le résultat d’une conversion implicite entre entiers, réels et booléens, et écrire la conversion explicite avec static_cast.
  3. Expliquer pourquoi l’initialisation avec accolades refuse les conversions qui perdent de l’information, et ce que fait GCC dans chaque cas.
  4. Déclarer avec const ou constexpr toute valeur qui ne doit pas changer, et distinguer un mot-clé de l’autre.
  5. Déduire le type d’un littéral (5, 5u, 5.0, 5.0f, '5', "5") et celui que auto lui attribue.

Le type comme interprétation

La leçon Variables et mémoire a présenté la variable comme une case avec un nom, un type et une valeur, et les leçons Les entiers et leur représentation et Les nombres à virgule flottante ont montré que, dans la case, il n’y a pas de nombres mais des bits, et que le type dit comment les lire. Cette leçon conduit cette idée à sa conséquence : si le type est la règle de lecture, alors les mêmes bits signifient des choses différentes selon le type avec lequel on les lit, et faire passer une valeur d’un type à un autre, ce qu’en C++ on appelle une conversion, c’est changer de règle. Certaines conversions conservent la valeur (l’entier 7 devient le réel 7.0 sans rien perdre) ; d’autres l’altèrent (le réel 2.7 devient l’entier 2). Il en découle la question qui parcourt la leçon : dans chaque conversion, la valeur est-elle conservée, et qui le vérifie ?