共用方式為


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

請參閱

參考

<utility>

Lvalues 和 Rvalues