24. auto et typeof ▲
24-1. auto▲
Quand on a défini les variables de type File dans le chapitre précédent, on a répété le nom du type des deux côtés de l'opérateur = :
File file =
File
(
"enregistrements_etudiants"
, "w"
);
Cela semble redondant. C'est également lourd et sujet à erreurs, surtout quand le nom du type est plus long.
NomDeTypeTresLong var =
NomDeTypeTresLong
(
/* ... */
);
Heureusement, le nom du type sur le côté gauche de l'affectation n'est pas nécessaire parce que le compilateur peut inférer le type de la variable depuis l'expression à droite de l'affectation. Pour que le compilateur infère le type, le mot-clé auto peut être utilisé :
auto
var =
NomDeTypeTresLong
(
/* ... */
);
auto peut être utilisé avec n'importe quel type même si le type n'est pas écrit explicitement du côté droit :
auto
duree =
42
;
auto
distance =
1
.2
;
auto
accueil =
"Hello"
;
auto
vehicule =
JoliVelo
(
"bleu"
);
Même si auto est l'abréviation de automatique, il ne vient pas d'inférence automatique des types. Il vient de classe automatique de stockage, qui est une notion à propos de la durée de vie des variables. auto est utilisé quand aucun autre indicateur n'est approprié. Par exemple, la définition suivante n'utilise pas auto :
immutable i =
42
;
Dans ce code, le compilateur infère le type de i en immutable int (nous verrons immutable dans un chapitre ultérieur).
24-2. typeof▲
typeof donne le type d'une expression (ce qui comprend les variables simples, les objets, les littéraux…).
Ce qui suit est un exemple de comment typeof peut être utilisé pour spécifier un type sans l'écrire explicitement :
int
valeur =
100
; // déjà défini comme 'int'
typeof
(
valeur) valeur2; // signifie "type de valeur"
typeof
(
100
) valeur3; // signifie "type du littéral 100"
Les deux dernières définitions sont équivalentes à ce qui suit :
int
valeur2;
int
valeur3;
Il est évident que typeof n'est pas nécessaire dans des situations comme celles-ci, quand les types sont déjà connus. Ce mot-clé est surtout utile dans les définitions de modèles (templates), que nous verrons dans des chapitres ultérieurs.
24-3. Exercices▲
Comme nous l'avons vu précédemment, le type des littéraux tels que 100 est int (et non short, long, ou n'importe quel autre type). Écrire un programme pour déterminer le type des littéraux à virgule flottante comme 1.2.
typeof() et .stringof sont utiles pour ce programme.