Il arrive quune variable dun certain type doive être recopiée dans une autre, dun type différent. Le compilateur doit alors effectuer un changement de type (type casting). Ce changement est automatique dans certains cas, notamment pour les passages des entiers entre eux ou des décimaux aux entiers et réciproquement.
Dans dautres cas, la transformation nest pas automatique, il faut lexpliciter avec un opérateur de changement de type, sans quoi le compilateur proteste. Un tel opérateur a une syntaxe très simple : pour transformer une variable ou une expression dun type quelconque en un type différent xxx, on écrit :
(xxx) expression
ou encore :
xxx (expression)
comme si xxx était une fonction.
Voici un exemple simple. Si lon écrit :
int i = 100, j = 3;double d = i/j;
d vaudra alors 33.0, parce que la division est effectuée sur des opérateurs entiers et que le reste est donc perdu. Par contre, si lon écrit lune quelconque des deux lignes suivantes :
double d = i/ (double) j;
ou bien :
double d = i/ double(j);
d sera initialisé à 33.333..., comme attendu, car j aura été transformé en décimal avant la division; dans ce cas, i est aussi transformé implicitement en décimal pour faire la division, suivant les règles de conversion résultant des opérations. (On aurait pu aussi faire le changement de type sur i.)
Le changement de type est réellement considéré comme un opérateur unaire par le compilateur (des opérateurs unaires en fait, car il en existe autant que de types), et il peut être redéfini comme les autres (voir le chapitre 7). Il a une priorité plus élevée que les opérateurs binaires.
Exercice 2.8 | Parmi les lignes suivantes, lesquelles donnent à d la valeur 33.333... ? d = double(i)/j;d = (double) i/j;d = double(i/j);d = double(i)/ double(j); |
Voir solution |
Le changement de type est couramment utilisé pour modifier les types de pointeurs (voir paragraphe à ce sujet).
Précédent | Sommaire | Suivant |