Pour les variables, spécifie que le type de la variable qui est déclarée sera automatiquement déduit de son initialiseur. Pour les fonctions, spécifie que le type de retour est un type de retour de fin ou sera déduit de ses instructions de retour (depuis C ++ 14).
Syntaxe
auto variable initializer (1) (since C++11)
auto function -> return type (2) (since C++11)
auto function (3) (since C++14)
decltype(auto) variable initializer (4) (since C++14)
decltype(auto) function (5) (since C++14)
auto :: (6) (concepts TS)
cv(optional) auto ref(optional) parameter (7) (since C++14)
Explication
1) Lors de la déclaration de variables dans la portée de bloc, dans la portée de l'espace de noms, dans les instructions d'initialisation des boucles for, etc., le mot-clé auto peut être utilisé comme spécificateur de type. Une fois que le type de l'initialiseur a été déterminé, le compilateur détermine le type qui remplacera le mot-clé auto en utilisant les règles de déduction d'argument de modèle à partir d'un appel de fonction (voir Déduction d'argument de modèle # Autres contextes pour plus de détails). Le mot-clé auto peut être accompagné de modificateurs, tels que const ou &, qui participeront à la déduction de type. Par exemple, étant donné const auto& i = expr;
, le type de i est exactement le type de l'argument u dans un modèle imaginaire template<class U> void f(const U& u)
si la fonction appellef(expr)
a été compilé. Par conséquent, auto && peut être déduit soit comme une référence lvalue, soit comme une référence rvalue selon l'initialiseur, qui est utilisé dans la boucle for basée sur la plage. Si auto est utilisé pour déclarer plusieurs variables, les types déduits doivent correspondre. Par exemple, la déclaration auto i = 0, d = 0.0;
est mal formée, tandis que la déclaration auto i = 0, *p = &i;
est bien formée et l'auto est déduite comme int.
2) Dans une déclaration de fonction qui utilise la syntaxe du type de retour de fin, le mot-clé auto n'effectue pas de détection de type automatique. Cela fait uniquement partie de la syntaxe.
3) Dans une déclaration de fonction qui n'utilise pas la syntaxe du type de retour de fin, le mot-clé auto indique que le type de retour sera déduit de l'opérande de son instruction de retour en utilisant les règles de déduction des arguments de modèle.
4) Si le type déclaré de la variable est decltype (auto), le mot-clé auto est remplacé par l'expression (ou la liste d'expressions) de son initialiseur, et le type réel est déduit en utilisant les règles de decltype.
5) Si le type de retour de la fonction est déclaré decltype (auto), le mot-clé auto est remplacé par l'opérande de son instruction return, et le type de retour réel est déduit en utilisant les règles de decltype.
6) Un spécificateur de nom imbriqué de la forme auto :: est un espace réservé qui est remplacé par un type de classe ou d'énumération suivant les règles de déduction d'espace réservé de type contraint.
7) Une déclaration de paramètre dans une expression lambda. (depuis C ++ 14) Une déclaration de paramètre de fonction. (concepts TS)
Notes
Jusqu'à C ++ 11, auto avait la sémantique d'un spécificateur de durée de stockage. Le mélange de variables automatiques et de fonctions dans une seule déclaration, comme dans auto f() -> int, i = 0;
n'est pas autorisé.
Pour plus d'informations: http://en.cppreference.com/w/cpp/language/auto