Heim >Backend-Entwicklung >C++ >Wie verbessert „decltype(auto)' die Ableitung von Rückgabetypen und die Verwendung von Vorlagen in C?
Verwendungen der Sprachfunktion „decltype(auto)“
Das in C 14 eingeführte Idiom „decltype(auto)“ ermöglicht „ auto“-Deklarationen, um „decltype“-Regeln für bestimmte Ausdrücke zu nutzen, hauptsächlich für die Ableitung von Rückgabetypen in Funktionen. Sein Nutzen geht jedoch über dieses Szenario hinaus.
Weiterleitung von Rückgabetypen in generischem Code
Für nicht generischen Code ist die explizite Auswahl von Rückgabetypen als Referenzen möglich. In generischem Code ermöglicht „decltype(auto)“ jedoch eine genaue Weiterleitung des Rückgabetyps, unabhängig davon, ob der Rückgabetyp eine Referenz oder ein Wert ist.
template<class Fun, class... Args> decltype(auto) Example(Fun fun, Args&&... args) { return fun(std::forward<Args>(args)...); }
Verzögerung der Rückgabetypableitung in rekursiven Vorlagen
Beim Definieren rekursiver Vorlagen kann „decltype(auto)“ die Ableitung des Rückgabetyps bis nach der Vorlage verschieben Instanziierung.
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>{}); } int main() { decltype(iter(Int<10>{})) a; }
Zusätzliche Anwendungen
Gemäß dem Standardentwurf N3936 kann „decltype(auto)“ in verschiedenen Kontexten erscheinen, einschließlich Funktionsdeklaratoren und Typspezifizierern und Variableninitialisierung. Diese Kontexte bieten Nutzen für Aktionen wie die Ableitung von Rückgabetypen, die Bezeichnung von Typplatzhaltern und die Zuweisung sicherer Werte.
int i; int&& f(); auto x3a = i; // decltype(x3a) is int decltype(auto) x3d = i; // decltype(x3d) is int auto x4a = (i); // decltype(x4a) is int decltype(auto) x4d = (i); // decltype(x4d) is int& auto x5a = f(); // decltype(x5a) is int decltype(auto) x5d = f(); // decltype(x5d) is int&&
Das obige ist der detaillierte Inhalt vonWie verbessert „decltype(auto)' die Ableitung von Rückgabetypen und die Verwendung von Vorlagen in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!