forward
Wandelt bedingt sein Argument in einen rvalue-Verweis um, wenn das Argument ein rvalue-Wert oder ein rvalue-Verweis ist. Dadurch wird die rvalue-Funktion eines Arguments auf die Weiterleitungsfunktion zur Unterstützung einer perfekten Weiterleitung zurückgesetzt.
template<class Type> // accepts lvalues
Type&& forward(typename remove_reference<Type>::type& Arg)
template<class Type> // accepts everything else
Type&& forward(typename remove_reference<Type>::type&& Arg) noexcept
Parameter
Parameter |
Beschreibung |
---|---|
Type |
Der Typ des Werts, der an Arg übergeben wurde. Dieser kann sich vom Typ Arg unterscheiden. In der Regel bestimmt durch ein Vorlagenargument der Weiterleitungsfunktion. |
Arg |
Das umzuwandelnde Argument. |
Rückgabewert
Gibt einen rvalue-Verweis auf Arg zurück, wenn der Wert, der an Arg übergeben wurde, ursprünglich ein rvalue-Wert oder ein Verweis auf einen rvalue-Wert war; gibt andernfalls Arg zurück, ohne den Typ zu ändern.
Hinweise
Sie müssen ein explizites Vorlagenargument angeben, um forward aufzurufen.
forward leitet das Argument nicht weiter. Stattdessen ermöglicht forward dem Compiler durch bedingte Umwandlung des Arguments in einen rvalue-Verweis, wenn es ursprünglich ein rvalue-Wert oder ein rvalue-Verweis war, eine Überladungsauflösung mit Kenntnis des ursprünglichen Typs des weitergeleiteten Arguments auszuführen. Der sichtbare Typ eines Arguments einer Weiterleitungsfunktion kann vom ursprünglichen Typ abweichen, z. B. wenn ein rvalue-Wert als Argument einer Funktion verwendet wird und an einen Parameternamen gebunden ist. Mithilfe eines Namens wird er in einen lvalue-Wert verwandelt, unabhängig davon, ob der Wert tatsächlich als rvalue-Wert vorhanden ist. Mit forward wird die rvalue-Funktion des Arguments wiederhergestellt.
Das Wiederherstellen der rvalue-Funktion des ursprünglichen Werts eines Arguments zum Ausführen einer Überladungsauflösung wird als perfekte Weiterleitung bezeichnet. Mit der perfekten Weiterleitung wird eine Vorlagenfunktion aktiviert, um ein Argument eines Referenztyps zu akzeptieren und die rvalue-Funktion wiederherzustellen, falls es für eine korrekte Überladungsauflösung erforderlich ist. Mithilfe der perfekten Weiterleitung können Sie die Verschiebesemantik für rvalues beibehalten und brauchen keine Überladungen für Funktionen bereitzustellen, die sich nur durch den Referenztyp ihrer Argumente unterscheiden.
Anforderungen
Header: <Hilfsprogramm>
Namespace: std