in C++ 11 gibt es zwei Syntaxen für Funktionsdeklaration:
RückgabetypIdentifikator(
Argument-Erklärungen ...)
und
auto
Kennung(
Argument-Erklärungen ...)
->
return_type
Sie sind gleichwertig. Wenn sie nun gleichwertig sind, warum willst du dann das Letztere benutzen? Nun, C++ 11 führte diese coole decltype
Sache ein, mit der Sie den Typ eines Ausdrucks beschreiben können. Vielleicht möchten Sie den Rückgabetyp aus den Argumenttypen ableiten. Also versuchen Sie:
template <typename T1, typename T2>
decltype(a + b) compose(T1 a, T2 b);
und der Compiler wird Ihnen sagen, dass es nicht weiß, was a
und b
sind im decltype
Argument. Dies liegt daran, dass sie nur von der Argumentliste deklariert werden.
Sie können das Problem problemlos umgehen, indem Sie declval
und die Template-Parameter verwenden, die bereits deklariert sind. Wie:
template <typename T1, typename T2>
decltype(std::declval<T1>() + std::declval<T2>())
compose(T1 a, T2 b);
außer es wird jetzt wirklich ausführlich. So ist die alternative Erklärung Syntax wurde vorgeschlagen und umgesetzt und jetzt können Sie
template <typename T1, typename T2>
auto compose(T1 a, T2 b) -> decltype(a + b);
schreiben und es ist weniger ausführlich und die Scoping-Regeln müssen nicht geändert werden.
C++ 14-Update: C 14 ++ erlaubt auch nur
auto
Kennung(
Argument-Erklärungen ...)
solange die Funktion vollständig vor der Verwendung definiert ist und alle return
-Anweisungen auf den gleichen Typ schließen. Die ->
-Syntax bleibt für öffentliche Funktionen (in der Kopfzeile deklariert) hilfreich, wenn Sie den Textkörper in der Quelldatei ausblenden möchten. Etwas offensichtlich ist das nicht mit Templates möglich, aber es gibt einige konkrete Typen (die normalerweise über Template-Metaprogrammierung abgeleitet werden), die sonst schwer zu beschreiben sind.
Es ist Teil der Syntax des abschließenden Rückgabetyps. Siehe http://stackoverflow.com/a/4113390/962089 – chris
Es ist kein Operator, sondern ein Teil der Syntax. – texasbruce
Als Antwort auf "wo kann ich lesen?" Ist die C++ - Spezifikation am zuverlässigsten. Mangels Geldmitteln oder dem Wunsch, Geld auszugeben, ist der letzte Arbeitsentwurf oft nah genug und kostenlos. Diese Spezifikationen sind hochgradig technisierbar, daher mangelt es Ihnen an Vertrautheit mit dem Lesen von ISO-Spezifikationen, versuchen Sie cplusplus.com oder cppreference.com oder andere solche Seiten, die nicht autorisierend sind, aber in der Regel sehr genau sind. Hinweis: Der abschließende Rückgabetyp kann ab C++ 14 weggelassen werden. – Les