Argumente mit std::forward weiterleiten
In C 0x wird std::forward verwendet, um Argumente an einen anderen Funktionsaufruf weiterzuleiten. Dies ist von Vorteil, wenn Sie vermeiden möchten, die Argumente explizit kopieren oder verschieben zu müssen.
Die Verwendung von std::forward beinhaltet die Verwendung der &&&-Notation in den Funktionsparametern. Mit dieser Notation können Sie sowohl L-Wert- als auch R-Wert-Referenzen als Argumente akzeptieren.
Im gegebenen Beispiel:
<code class="cpp">template<class T> void foo(T&&& arg) { bar(std::forward<T>(arg)); }</code>
Der std::forward
Sie sollten jedoch nicht in allen Fällen std::forward verwenden. Dies ist nur erforderlich, wenn Sie den Referenztyp des Arguments beibehalten müssen. Wenn Sie beispielsweise eine Funktion haben, die keine R-Wert-Referenzen akzeptiert, sollten Sie std::forward nicht verwenden.
Im folgenden Beispiel:
<code class="cpp">template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); }</code>
Sie müssen nicht verwenden std::forward, da die Funktion „doSomethingElse“ L-Wert- oder R-Wert-Referenzen annehmen kann.
Wenn Sie jedoch eine Funktion haben, die R-Wert-Referenzen entgegennimmt, sollten Sie std::forward verwenden, um sicherzustellen, dass die Argumente als R-Wert weitergeleitet werden Referenzen. Zum Beispiel:
<code class="cpp">template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); }</code>
In diesem Beispiel wird std::forward verwendet, um sicherzustellen, dass die Argumente als R-Wert-Referenzen weitergeleitet werden, auch wenn es sich ursprünglich um L-Wert-Referenzen handelt.
Schließlich Sie sollte ein Argument nicht mehrmals weiterleiten. Dies kann zu undefiniertem Verhalten führen. Beispielsweise ist der folgende Code falsch:
<code class="cpp">template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); doSomethingWeird<val, Params...>(std::forward<Params>(args)...); }</code>
In diesem Beispiel werden die Argumente zweimal weitergeleitet, was zu undefiniertem Verhalten führen kann.
Das obige ist der detaillierte Inhalt von## Wann sollte ich std::forward in C verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!