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
Patricia ArquetteOriginal
2024-12-11 18:48:10687Durchsuche

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)...); 
}

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

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!

Stellungnahme:
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