Avatar ·

为什么需要 std::forward 以及它在 C++ 中解决什么问题?

我正在学习 C++11,遇到了 std::forward。我阅读了文档,但不太理解它的用途。我有一个模板函数,它通过通用引用 (T&&) 接受参数并将其传递给另一个函数: ```cpp template void wrapper(T&& arg) { target(arg); // 直接传递 } ``` 但是当我传递 rvalue(例如临时对象)时,target 将其作为 lvalue 接收,因为 arg 有名字。因此发生的是拷贝而不是移动。我听说 std::forward 可以解决这个问题,但我不明白如何解决。您能通过示例解释一下:std::forward 具体解决了哪些问题以及如何正确使用它?最好有代码,以便直观地看到区别。谢谢! <<>>

什么是 std::forward 以及为什么需要它

std::forward 是用于模板函数中 完美转发 (perfect forwarding) 参数的工具。它的主要目标是保留参数的“值类别 (value category)”。