forward
如果引數是右值或右值參考,有條件地將引數轉型為右值參考。 這會將引數的右值特性還原為轉送函式,以支援完美轉送。
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
參數
參數 |
描述 |
---|---|
Type |
傳入 Arg 的實值類型,可能不同於 Arg 的類型。 通常由轉送函式的樣板引數所決定。 |
Arg |
要轉型的引數。 |
傳回值
如果傳入 Arg 的值最初是右值或右值參考,則傳回 Arg 的右值參考,否則傳回 Arg 而不修改其類型。
備註
您必須指定明確的樣板引數呼叫 forward。
forward 不會轉送它的引數。 相反地,如果引數原本是右值或右值參考,則透過有條件地將引數轉型為右值參考,forward 可讓編譯器在具備所轉送引數原始類型的知識下執行多載解析。 轉送函式引數的明顯類型可能與其原始類型不同,例如當右值做為函式引數且繫結至參數名稱時,具有名稱會使其成為左值,不論值是否確實為右值。forward 會還原引數的右值特性。
還原引數的原始值右值特性以執行多載解析,稱為「完美轉送」(Perfect Forwarding)。 完美轉送讓樣板函式接受任何參考類型的引數,並在正確的多載解析需要時還原它的右值特性。 透過完美轉送,您可以保存右值的移動語意,避免必須為只變更其引數參考類型的函式提供多載。
需求
標頭:<utility>
命名空間: std