?std::forword的作用
完美轉發的核心目的是保持參數的原始類型(包括const/volatile限定符和左值/右值性質)不變地傳遞給其他函數。
為什么需要完美轉發
在沒有完美轉發之前,我們面臨以下問題:
-
模板參數傳遞中的值類別丟失
-
當參數通過模板函數轉發時,參數的值類別(左值/右值)信息會丟失
-
右值參數會被推導為左值,導致無法正確調用移動語義
-
使用完美轉發,則可以保證傳遞的參數的類型不變。
template<typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) {return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
沒有完美轉發的話,構造T時無法保持參數的原始值類別,可能導致不必要的拷貝。
鏈接