Pfeiloperator in Funktionsköpfen
In C 11 und höher gibt es zwei Syntaxen für Funktionsdeklarationen:
Traditionelle Syntax:
return-type identifier(argument-declarations...)
Moderne Syntax:
auto identifier(argument-declarations...) -> return_type
Beide Syntaxen sind gleichwertig. Die moderne Syntax bietet jedoch eine bequeme Möglichkeit, den Rückgabetyp aus den Argumenttypen abzuleiten. Dies ist besonders nützlich, wenn Sie den Decltype-Bezeichner verwenden, mit dem Sie den Typ eines Ausdrucks beschreiben können.
In früheren C-Versionen würden Sie schreiben:
template <typename T1, typename T2> decltype(a + b) compose(T1 a, T2 b);
Der Compiler würde dies jedoch tun Ich weiß nicht, was a und b sind, wenn Sie versuchen, den Rückgabetyp zu bestimmen.
Um dieses Problem zu beheben, können Sie declval verwenden:
template <typename T1, typename T2> decltype(std::declval<T1>() + std::declval<T2>()) compose(T1 a, T2 b);
Dies wird jedoch ausführlicher. Stattdessen können Sie mit der modernen Syntax Folgendes schreiben:
template <typename T1, typename T2> auto compose(T1 a, T2 b) -> decltype(a + b);
Diese Syntax ist prägnanter und behält die gleichen Scoping-Regeln bei.
C 14-Update:
C 14 erlaubt die Verwendung der folgenden Syntax:
auto identifier(argument-declarations...)
solange die Funktion vor der Verwendung vollständig definiert ist und alle Rückgabeanweisungen denselben Typ ableiten.
Anwendungsfälle:
Die Pfeiloperator-Syntax (->) bleibt für öffentliche Funktionen nützlich, die in Header-Dateien deklariert sind, bei denen Sie die Implementierung in der Quelldatei ausblenden möchten. Dies ist besonders relevant für Template-Funktionen oder spezielle konkrete Typen, die durch Template-Metaprogrammierung abgeleitet werden.
Das obige ist der detaillierte Inhalt vonWann sollten Sie den Pfeiloperator in C-Funktionsüberschriften verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!