Die Einführung von decltype(auto) in C 14 brachte eine transformative Funktion mit sich erweiterte die Möglichkeiten der Typableitung. Über seinen Hauptzweck hinaus, die Konformität automatischer Deklarationen mit den Decltype-Regeln zu ermöglichen, bietet decltype(auto) eine Vielzahl weiterer wertvoller Anwendungen.
In generischem Code ist die fehlerfreie Weiterleitung von Rückgabetypen von entscheidender Bedeutung. Im Gegensatz zu nicht generischem Code, bei dem Rückgabetypen manuell angegeben werden können, um einen Referenztyp zu erhalten, bietet decltype(auto) die Flexibilität, Rückgabetypen unabhängig von ihrem Referenztyp ohne Vorkenntnisse weiterzuleiten.
template
decltype(auto) Beispiel(Fun fun, Args&&... args)
{
return fun(std::forward<Args>(args)...);
}
In rekursiven Vorlagen kann währenddessen eine unendliche Rekursion auftreten Vorlageninstanziierung, wenn der Rückgabetyp basierend auf einer vorherigen Iteration angegeben wird. Durch die Verwendung von decltype(auto) wird der Abzug des Rückgabetyps verschoben, bis die Instanziierung der Vorlage abgeschlossen ist, um eine ordnungsgemäße Typauflösung sicherzustellen.
template
struct Int {};
constexpr auto iter(Int<0>) -> Int<0>;
template
constexpr auto iter(Int) -> decltype(auto)
{ return iter(Int
int main() { decltype(iter(Int<10>{})) a; }
Die Vielseitigkeit von decltype(auto) erstreckt sich auch auf andere Kontexte, wie im C-Standardentwurf (N3936) dargelegt. :
Das obige ist der detaillierte Inhalt vonWie erweitert „decltype(auto)' die Abzugsfähigkeiten vom Typ C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!