auto
Remonter à Liste alphabétique des mots clés - Index
Le mot clé auto
a été redéfini dans les standards C++11 et C++17. Par conséquent, C++Builder supporte deux définitions différentes de auto
, déterminées par le standard suivi par chaque compilateur C++.
- La définition C++98 est prise en charge par des compilateurs C++ de précédente génération (BCC32 et BCCOSX).
- La définition C++11 est prise en charge par les compilateurs C++ améliorés par Clang compatibles C++11.
- Les définitions C++14 et C++17 sont prises en charge par les compilateurs C++ améliorés par Clang compatibles C++11.
Cette page décrit les définitions de auto
.
Sommaire
Définition C++98
Catégorie
Spécificateurs de classe de stockage (C++)
Syntaxe
[auto] <data-definition> ;
Description
Utilisez le modificateur auto afin de définir une durée de vie locale pour une variable locale.
C'est le comportement par défaut pour les variables locales ; il est rarement utilisé.
Exemple :
void f() {
auto int x;
}
Définition C++11
Catégorie
Syntaxe
[auto] <variable_name> = <initializer_expression> ;
Description
Utilisez auto
comme un simple spécificateur de type qui déduit sa sémantique de l'expression de l'initialiseur.
Exemple :
int f() {
return 1;
}
int _tmain(int argc, _TCHAR* argv[]) {
auto x = f();
return 0;
}
Dans cet exemple, le type de la variable x
est déduit de l'expression de son initialiseur : f()
. Par conséquent, x
devrait être du type int, le type renvoyé par f()
.
Définition C++14
Dans C++14, auto
peut être utilisé comme un type de retour pour une méthode, déduisant le type de retour, ainsi que pour l'inférence de type dans le cas d'une variable ou d'une constante, comme dans C++11.
Exemple :
// C++14 introduces using the auto keyword for a return type
auto MyMethod() {
return “Hello world”;
}
int _tmain(int argc, _TCHAR* argv[]) {
// C++11 introduced type deduction for a variable / constant
auto x = MyMethod();
return 0;
}
Définition C++17
Dans C++17, auto
peut être utilisé dans un paramètre de template pour déduire le type utilisé et pour des liaisons structurées.
Les liaisons structurées vous permettent de facilement lier des variables individuelles à des éléments d'un tuple. Cela signifie qu'une méthode utilisant std::tuple pour renvoyer des valeurs de retour multiples peut avoir ces valeurs assignées à plusieurs variables individuelles dans la méthode d'appel.
Exemple :
std::tuple<int, float> returnMultiple()
{ int i = 1; float f = 3.14; return std::make_tuple(i, f); }
// In the calling method, with i and f predefined variables:
auto [i, f] = returnMultiple();
Problème de migration du code
Lorsque les compilateurs C++ améliorés par Clang rencontrent l'ancienne syntaxe auto
(si auto
est utilisé comme un spécificateur de classe de stockage), ils émettent l'avertissement suivant :
[<compiler> Warning] File1.cpp(12): 'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases.