auto

De RAD Studio
Aller à : navigation, rechercher

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++.

Cette page décrit les définitions de auto.

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

Spécificateurs de type

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.

Voir aussi