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时无法保持参数的原始值类别,可能导致不必要的拷贝。
链接