auto
est un vieux C mot qui signifie "locale". auto a
est le même que auto int a
, et parce qu'une portée locale est la valeur par défaut pour une variable déclarée à l'intérieur d'une fonction, c'est aussi le même que int a
dans cet exemple.
Ce mot-clé est en fait un vestige de C prédécesseur B, où il n'y avait pas de types de base: tout ce qui a été int
, pointeur int
, tableau de int
.(*) Les déclarations seraient en auto
ou extrn
[sic]. C hérité de la "tout est int
" comme une règle par défaut, de sorte que vous pouvez déclarer des entiers avec
auto a;
extern b;
static c;
C ISO à se débarrasser de cette, mais beaucoup de compilateurs encore l'accepter pour des raisons de compatibilité descendante. Si cela semble familier, alors vous devriez vous rendre compte que la règle est à l'œuvre dans
unsigned d; // actually unsigned int
ce qui est encore commune dans un code moderne.
C++11 a réutilisé le mot-clé, qui peu si tous les programmeurs en C++ ont été à l'aide avec le sens original, pour son inférence de type. C'est surtout en sécurité parce que le "tout est int
" règle de C avait déjà été abandonné en C++98; la seule chose qui casse est auto T a
, ce qui n'était à l'aide de toute façon. (Quelque part dans ses mémoires sur l'histoire de la langue, Stroustrup commentaires à ce sujet, mais je ne trouve pas la référence exacte droit maintenant.)
(*) La manipulation des chaînes de B est intéressante: vous pouvez utiliser des tableaux de int
et pack de plusieurs personnages dans chaque membre. B était en fait BCPL avec une syntaxe différente.