使用std::forward 轉送參數
在C 0x 中,std::forward 用來將參數轉送至另一個函數呼叫。當您想要避免明確複製或移動參數時,這是有利的。
std::forward 的使用涉及在函數參數中使用 &&& 表示法。此表示法允許您接受左值和右值參考作為參數。
在給出的範例中:
<code class="cpp">template<class T> void foo(T&&& arg) { bar(std::forward<T>(arg)); }</code>
std::forward
但是,您不應在所有情況下使用 std::forward。只有當您需要保留參數的參考類型時才需要這樣做。例如,如果您有一個不接受右值參考的函數,則不應使用 std::forward。
在下列範例中:
<code class="cpp">template<int val, typename... Params> void doSomething(Params... args) { doSomethingElse<val, Params...>(args...); }</code>
您不需要使用std::forward 因為 doSomethingElse 函式可以接受左值或右邊值參考。
但是,如果您有一個接受右值參考的函數,則應該使用 std::forward 來確保參數作為右值轉送參考。例如:
<code class="cpp">template<int val, typename... Params> void doSomething(Params&&... args) { doSomethingElse<val, Params...>(std::forward<Params>(args)...); }</code>
在此範例中,std::forward 用於確保參數作為右值參考轉發,即使它們最初是左值引用。
最後,您不應多次轉發同一個參數。這可能會導致未定義的行為。例如,以下程式碼是不正確的:
<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>
在此範例中,參數被轉發兩次,這可能會導致未定義的行為。
以上是## 我什麼時候應該在 C 中使用 std::forward ?的詳細內容。更多資訊請關注PHP中文網其他相關文章!