Manuel de suivi dynamique Solaris

Conversions de types

Lorsque des expressions sont construites à l'aide d'opérandes de types différents mais compatibles, les types sont convertis de manière à déterminer celui de l'expression résultante. Les règles en langage D concernant les conversions de types sont identiques aux règles de conversion arithmétique des nombres entiers en ANSI-C. Ces règles sont parfois appelées conversions arithmétiques usuelles.

Il est possible de décrire tout simplement les règles de conversion comme suit : Chaque type d'entier est classé dans l'ordre char, short, int, long, long long, sachant que les types correspondants non signés apparaissent au-dessus de leur équivalent signé mais en dessous du type d'entier suivant. Lorsque vous construisez une expression à l'aide de deux opérandes entiers comme x + y et que ces opérandes appartiennent à un type d'entier différent, le type d'opérande le plus haut classé sert de type de résultat.

Si une conversion s'impose, l'opérande de niveau inférieur est le premier promu au type de niveau supérieur. La promotion ne modifie pas vraiment la valeur de l'opérande : elle étend seulement la valeur vers un conteneur plus grand en fonction de son signe. Si un opérande non signé est promu, les bits supérieurs non utilisés du nombre entier résultant sont remplis avec des 0. Si un opérande signé est promu, les bits supérieurs non utilisés sont remplis par l'extension du signe d'exécution. Si un type signé est converti en type non signé, le signe du type signé est d'abord étendu, puis le nouveau type non signé, déterminé par la conversion, lui est affecté.

Les nombres entiers et les autres types peuvent également être convertis explicitement d'un type en un autre. En langage D, vous pouvez convertir les pointeurs et les nombres entiers en n'importe quel type de pointeur ou de nombre entier mais pas en un autre type. Les règles de conversion et de promotion des chaînes et des tableaux de caractères sont traitées dans le Chapitre6Chaînes de caractères. La conversion d'un entier ou d'un pointeur est créée à l'aide d'une expression telle que :

y = (int)x;

le type de destination étant placé entre parenthèses et servant de préfixe à l'expression de la source. Les nombres entiers sont convertis en des types de niveau supérieur par l'intermédiaire d'une promotion. Ils sont convertis en types de niveau inférieur en transformant en zéro les bits supérieurs superflus du nombre entier.

Comme D n'autorise pas l'arithmétique en virgule flottante, aucune conversion d'opérande en virgule flottante n'est autorisée et aucune règle de conversion en virgule flottante implicite n'est définie.