完美转发

完美转发

完美转发(Perfect Forwarding)是 C++11 中引入的一种编程技巧,其目的是在编写泛型函数时能够保留参数的类型和值类别(左值或右值),从而实现更为高效且准确地传递参数。通过使用右值引用和模板类型推导,完美转发允许我们在函数中以原始参数的形式将参数传递给其他函数,而不会发生不必要的拷贝操作,从而提高性能。

  1. 不会发生拷贝
  2. 不会左值变右值

std::forward被称为完美转发,它的作用是保持原来的值属性不变

std::forward必须配合T&&来使用。例如T&&接受左值int&时,T会被推断为int&,而T&&接受右值int&&时,T被推断为int。在std::forward中只是单纯的返回T&&。那么依据外层是左值时,T为int&,那么T&&即int& &&仍为int&,当外层函数参数为右值,T&&为int&&,这样就保证了传进来是左值则还是左值,是右值还是右值。

在涉及传参构造新类的时候可以使用完美转发比如:

  1. 用完美转发实现可变参数模板函数
  2. 用完美转发实现智能指针
template <typename T, typename... Args>
std::unique_ptr<T> make_unique(Args&&... args) 
{
    return std::unique_ptr<T>(new T(std::forward<Args>(args)...));
}
posted @ 2024-05-11 11:38  227569hy  阅读(44)  评论(0)    收藏  举报