Heim >Backend-Entwicklung >C++ >Was bewirkt der Pfeiloperator („->') in einer Funktionsüberschrift?

Was bewirkt der Pfeiloperator („->') in einer Funktionsüberschrift?

Barbara Streisand
Barbara StreisandOriginal
2024-11-18 07:08:021105Durchsuche

What Does the Arrow Operator (`->`) In einer Funktionsüberschrift tun? 
`) 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:

  1. return- Typbezeichner (Argument-Deklarationen...)
  2. Auto-Bezeichner (Argument-Deklarationen...) -> return_type

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!

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