`) In einer Funktionsüberschrift tun? " />
Pfeiloperator (->) in Funktionsüberschriften
In diesem Artikel wird der in Funktionsüberschriften verwendete Pfeiloperator (->) untersucht grundlegender Aspekt der Syntax von C 11.
Den Pfeiloperator verstehen
C 11 führte zwei äquivalente Syntaxen für die Funktionsdeklaration ein:
Der Pfeiloperator (->;) im Die zweite Syntax erfüllt einen entscheidenden Zweck. Sie ermöglicht die Ableitung des Rückgabetyps einer Funktion aus ihren Argumenten mithilfe des Schlüsselworts decltype.
Warum den automatisch abgeleiteten Rückgabetyp verwenden?
In bestimmten Situationen ist es vorteilhaft, den Rückgabetyp dynamisch basierend auf den Argumenttypen abzuleiten. Betrachten Sie beispielsweise die folgende Funktion, die die Summe zweier Werte berechnet:
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
In diesem Fall: Das Argument decltype teilt dem Compiler mit, dass der Rückgabetyp mit dem Typ des Ausdrucks a b identisch sein sollte. Diese Deklaration löst jedoch einen Fehler aus, da dem Compiler Informationen zu a und b im decltype-Argument fehlen.
Fehlerbehebung
Um dieses Problem zu beheben, können Sie Folgendes tun: Verwenden Sie std::declval und die Vorlagenparameter, um die Typen manuell anzugeben:
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
oder verwenden Sie die alternative Deklarationssyntax mit dem Pfeiloperator (->):
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
The Letztere Option ist prägnanter und rationalisiert die Scoping-Regeln.
C 14-Erweiterungen
In C 14 ist die folgende Syntax auch zulässig, solange die Funktion vollständig definiert ist vor der Verwendung und alle Rückgabeanweisungen leiten sich vom gleichen Typ ab:
auto identifier (argument-declarations...)
Der Pfeiloperator (->) bleibt jedoch nützlich, um öffentliche Funktionen (in Headern) zu deklarieren, während ihre Körper in Quelldateien ausgeblendet werden.
Das obige ist der detaillierte Inhalt vonWas bewirkt der Pfeiloperator („->') in einer Funktionsüberschrift?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!