什么情况下 std::forward
不需要?它用于包装内部函数参数,即模板右值(即,它可以是左值或命名右值)。像:
template<class T>
void outer(T&& t) {
inner(std::forward<T>(t));
}
我猜一种情况是内部函数参数按值传递。还有其他情况吗?我在写std::begin(std::forward<Ct>(ct))
Ct 是模板右值引用的地方时遇到了这个问题。
编辑关于可能的重复
如果我没记错的话,这是第三次尝试关闭这个 4 年的老问题,因为一些不懂这个问题的新手重复了这个问题。
“使用前锋的好处?” 和“什么时候不使用带有 r 值的 std::forward?” 是非常不同的问题。首先是为初学者介绍 r 值,其次是为高级 C++ 用户讨论完美转发。我是元模板库和 lambda 库的作者,他们不需要对基础知识进行详细描述。答案中的信息与其他问题非常不同。