auto
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.
- Die C++98-Definition wird von den C++-Compilern der vorherigen Generation (BCC32 und BCCOSX) unterstützt.
- Die C++11-Definition wird von C++11-kompatiblen C++-Compilern, die durch Clang erweitertet wurden, unterstützt.
- Die C++14- und C++17-Definitionen werden von C++11-kompatiblen C++-Compilern, die durch Clang erweitertet wurden, unterstützt.
Auf dieser Seite sind die Definitionen von auto
beschrieben.
Inhaltsverzeichnis
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
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.