Das in C 14 eingeführte decltype(auto)-Idiom ermöglicht es automatischen Deklarationen, die Decltype-Regeln für das gegebene zu verwenden Ausdruck. Während seine primäre Verwendung darin besteht, den Rückgabetyp einer Funktion abzuleiten, gibt es auch andere wertvolle Anwendungen.
Decltype(auto) ermöglicht in generischem Code die perfekte Weiterleitung einer Rückgabe Typ, ohne den zugrunde liegenden Typ zu kennen. Dies ist besonders nützlich für generische Funktionen:
template<class Fun, class... Args> decltype(auto) Example(Fun fun, Args&&... args) { return fun(std::forward<Args>(args)...); }
decltype(auto) kann auch die Rückgabetypableitung in rekursiven Vorlagen verzögern und so eine unendliche Rekursion verhindern. Zum Beispiel:
template<int i> struct Int {}; constexpr auto iter(Int<0>) -> Int<0>; template<int i> constexpr auto iter(Int<i>) -> decltype(auto) { return iter(Int<i-1>{}); }
Über diese primären Anwendungen hinaus hat decltype(auto) verschiedene andere Verwendungszwecke, wie im C-Standardentwurf (N3936) beschrieben:
Variable Initialisierung:
decltype(auto) x3d = i; // decltype(x3d) is int
Zeigerdeklaration:
decltype(auto)*x7d = &i; // decltype(x7d) is int*
Das obige ist der detaillierte Inhalt vonWas sind die Anwendungen von „decltype(auto)' in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!