Heim > Backend-Entwicklung > C++ > Wie verbessert „decltype(auto)' die Ableitung von Rückgabetypen und die Verwendung von Vorlagen in C?

Wie verbessert „decltype(auto)' die Ableitung von Rückgabetypen und die Verwendung von Vorlagen in C?

Patricia Arquette
Freigeben: 2024-12-11 18:48:10
Original
761 Leute haben es durchsucht

How Does `decltype(auto)` Improve Return Type Deduction and Template Usage 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)...); 
}
Nach dem Login kopieren

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; }
Nach dem Login kopieren

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&amp;
auto x5a = f();            // decltype(x5a) is int
decltype(auto) x5d = f();  // decltype(x5d) is int&amp;&amp;
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage