Ich konnte keine gute Erklärung für decltype finden. Bitte erzähle mir als Anfänger, was es macht und warum es nützlich ist.
Zum Beispiel lese ich ein Buch, das die folgende Frage stellte. Kann mir jemand die Antwort erklären und warum, neben einigen guten (Anfänger-) Beispielen?
Was wäre der Typ jeder Variablen und welcher Wert hätte jede Variable, wenn der Code beendet ist?
%Vor%
Eine Zeile-für-Zeile-Erklärung wäre sehr hilfreich.
decltype
ist eine Möglichkeit, einen Typ anzugeben: Sie geben ihm einen Ausdruck , und decltype
gibt Ihnen einen Typ zurück, der dem Typ des Ausdrucks entspricht. Insbesondere ist decltype(e)
der folgende Typ:
Wenn e
der Name einer Variablen ist, d. h. ein "id-Ausdruck", dann ist der resultierende Typ der Typ der Variablen.
Andernfalls, wenn e
zu einem Lvalue vom Typ T
ausgewertet wird, ist der resultierende Typ T &
, und wenn e
zu einem rvalue vom Typ T
ausgewertet wird, dann der resultierende Typ ist T
.
Wenn Sie diese Regeln mit Regeln für kollabierende Referenzen kombinieren, können Sie decltype(e) &&
, das immer eine "geeignete" Referenz ist, sinnvoll einsetzen. (C ++ 14 fügt auch decltype(auto)
hinzu, um Ihnen den Typabzug von auto
kombiniert mit der Wertkategoriesemantik von decltype
zu geben.)
Beispiele:
%Vor% Es lohnt sich vielleicht, den Unterschied zwischen auto
und decltype
: auto
bei Typen und decltype
bei Ausdrücken zu betonen.
Sie sollten decltype
in der "täglichen" Programmierung nicht sehen oder verwenden. Es ist am nützlichsten in generischem (templated) Bibliothekscode, wo der fragliche Ausdruck nicht bekannt ist und von einem Parameter abhängt. (Im Gegensatz dazu kann auto
großzügig überall verwendet werden.) Kurz gesagt, wenn Sie neu in der Programmierung sind, werden Sie wahrscheinlich decltype
für einige Zeit nicht brauchen.