C++怎么实现完美转发(Perfect Forwarding)_C++模板元编程与万能引用

10次阅读

万能引用是模板中 T && 形式的参数,可推导为左值或右值引用:传入左值时 T 被推导为 U &,最终类型为 U &;传入右值时 T 被推导为 U,最终类型为 U &&。

C++ 怎么实现完美转发(Perfect Forwarding)_C++ 模板元编程与万能引用

在 C ++ 模板元编程中,完美转发(Perfect Forwarding)是指将函数模板的参数以完全相同的方式(包括左值 / 右值属性、const/volatile 限定等)传递给另一个函数。实现这一功能的关键是结合 万能引用(Universal Reference)和std::forward

什么是万能引用(Universal Reference)

万能引用出现在模板参数推导中,形式为 T&&,这里的 T 是一个模板类型参数。它之所以“万能”,是因为它可以被推导为左值引用或右值引用:

  • 当传入左值时,T 被推导为 U&,于是 (引用折叠规则)
  • 当传入右值时,T 被推导为 就是 template
    void wrapper(T&& arg) {
        real_function(std::forward(arg));
    }

    解释:

    • 如果调用 是左值,T 推导为 不执行移动,保持左值
    • 如果调用 template
      void relay(Args&&… args) {
          target(std::forward(args)…);
      }

      这里的参数包 (args)… 展开后对每个参数做正确转发。

      基本上就这些。掌握引用折叠、万能引用和 std::forward 的配合,就能在模板中实现真正的完美转发。不复杂但容易忽略细节。

text=ZqhQzanResources