auto

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Schlüsselwörter alphabetisch - Index


Das Schlüsselwort auto wurde für die C++11- und C++17-Standards neu definiert. Daher unterstützt C++Builder verschiedene Definitionen von auto entsprechend dem verwendeten Standard des jeweiligen C++-Compilers.

Auf dieser Seite sind die Definitionen von auto beschrieben.

C++98-Definition

Kategorie

Speicherklassenspezifizierer (C++)

Syntax

[auto] <data-definition> ;

Beschreibung

Mit dem Modifizierer auto können Sie für eine lokale Variable eine lokale Lebensdauer definieren.

Da dies ist für lokale Variablen die Vorgabe ist, wird dieser Modifizierer selten angegeben.

Beispiel:

void f() {
        auto int x;
}

C++11-Definition

Kategorie

Typ-Bezeichner

Syntax

[auto] <variable_name> = <initializer_expression> ;

Beschreibung

Verwenden Sie auto als einfachen Typ-Bezeichner, dessen Semantik aus dem Initialisierungsausdruck abgeleitet wird.

Beispiel:

int f() {
        return 1;
}

int _tmain(int argc, _TCHAR* argv[]) {
        auto x = f();
        return 0;
}

In diesem Beispiel wird der Typ der Variable x von ihrem Initialisierungsausdruck abgeleitet: f(). Deshalb hat x den Typ int, den von f() zurückgegebenen Typ.

C++14-Definition

In C++14 kann auto als Rückgabetyp für eine Methode verwendet werden, wobei der Rückgabetyp abgeleitet wird, sowie für eine Typableitung für eine Variable oder Konstante wie in C++11.

Beispiel:

// 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;
}

C++17-Definition

In C++17 kann auto in einem template-Parameter zur Ableitung des Typs und für strukturierte Bindungen verwendet werden.

Strukturierte Bindungen ermöglichen die einfache Bindung einzelner Variablen an Elemente eines Tupel. Das bedeutet, dass bei einer Methode, die mit std::tuple mehrere Rückgabewerte zurückgibt, diese Werte mehreren einzelnen Variablen in der aufrufenden Methode zugewiesen sein können.

Beispiel:

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();

Probleme bei der Codemigration

Wenn durch Clang erweiterte C++-Compiler auf eine alte auto-Syntax treffen (d. h. auto wird als Speicherklassenspezifizierer verwendet), lösen sie die folgende Warnung aus:

[<compiler> Warning] File1.cpp(12): 'auto' storage class specifier is not permitted in C++11, and will not be supported in future releases.

Siehe auch