Heim >Backend-Entwicklung >C++ >**Wie stellt std::forward die ordnungsgemäße Erhaltung der Argumentreferenz in C sicher?**
Verstehen der Verwendung von std::forward für Weiterleitungsargumente
In C stellt std::forward einen Mechanismus bereit, um die Natur von zu bewahren die Referenz eines Arguments, wenn es an eine andere Funktion oder aufrufbare Funktion übergeben wird. Durch die Verwendung wird sichergestellt, dass L-Wert-Argumente ihre L-Wert-Referenzen und R-Wert-Argumente ihre R-Wert-Referenzen beibehalten.
Wann ist std::forward zu verwenden?
Das Beispiel in der Frage zeigt dies vorteilhafter Einsatz von std::forward. Die Funktion foo akzeptiert eine R-Wert-Referenz (T&& arg) und leitet sie an bar weiter. Dadurch kann bar arg als R-Wert-Referenz empfangen, auch wenn es ursprünglich ein L-Wert war.
Verwendung von R-Wert-Referenzen in Parametern
Ja, die Verwendung von && in Parameterdeklarationen ist möglich gilt in jedem Fall. Allerdings können Funktionen mit &&-Parametern L-Wert- oder R-Wert-Referenzen annehmen. Wenn ein L-Wert mit einem &&-Parameter an eine Funktion übergeben wird, kann die Funktion den Referenten des L-Werts nicht ändern.
Beispiel mit Vorlagen und Weiterleitung
Im zweiten Funktionsbeispiel std::forward ist nicht erforderlich, da doSomethingElse eine variable Anzahl von Argumenten desselben Typs akzeptiert, die an doSomething übergeben werden. Wenn doSomethingElse jedoch eine Weiterleitung erfordert, würden Sie std::forward ähnlich wie im ersten Beispiel verwenden.
Mehrfache Weiterleitung
Wie in der Antwort erwähnt, wird ein Argument weiter weitergeleitet mehr als einmal ist in der Regel nicht ratsam. Dies liegt daran, dass das Weiterleiten normalerweise das Verschieben des Arguments beinhaltet und es nach dem Verschieben nicht mehr verwendet werden kann. Das Beispiel, in dem doSomething Argumente an doSomethingElse und doSomethingWeird weiterleitet, würde zu einem Fehler führen, da die zweite Weiterleitung versuchen würde, ein verschobenes Objekt zu verschieben.
Das obige ist der detaillierte Inhalt von**Wie stellt std::forward die ordnungsgemäße Erhaltung der Argumentreferenz in C sicher?**. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!