完美转发:在 C++(尤其是 C++11 及以后)中,指模板函数在将参数传递给另一个函数时,既不改变参数的值类别(左值/右值),也尽量保持其类型特征(如 const 等),从而避免不必要的拷贝,并正确选择重载。常见做法是使用转发引用(T&&)配合 **std::forward<T>(arg)**。
/ˈpɜːrfɪkt ˈfɔːrwərdɪŋ/
We use perfect forwarding to pass arguments to another function efficiently.
我们使用完美转发把参数高效地传给另一个函数。
By combining a forwarding reference with std::forward, the wrapper preserves whether the caller passed an lvalue or an rvalue, enabling the correct overload and avoiding extra copies.
通过将转发引用与 std::forward 结合,包装函数能保留调用者传入的是左值还是右值,从而选择正确的重载并避免额外拷贝。
该术语由两部分构成:perfect(完美的)强调“尽可能不损失信息、原样保留语义”,forwarding(转发)来自“把参数继续传递下去”。在 C++11 引入右值引用与移动语义后,“完美转发”成为描述这类“既转发又不改变参数性质”的惯用说法,常与 std::forward 的命名相呼应。
std::forward、转发引用与“完美转发”用法时高频出现。