【发布时间】:2012-08-16 10:42:22
【问题描述】:
什么情况下不需要std::forward?它用于包装内部函数参数,即模板右值(即,它可以是左值或命名右值)。喜欢在:
template<class T>
void outer(T&& t) {
inner(std::forward<T>(t));
}
我猜一种情况是内部函数参数按值传递。还有其他情况吗?我在写std::begin(std::forward<Ct>(ct)) 时遇到了这个问题,其中 Ct 是模板右值引用。
编辑关于可能的重复
如果我没记错的话,这是第三次尝试关闭这个 4 年的老问题,因为一些不懂这个问题的新手重复了这个问题。
“使用 forward 的好处?”和“什么时候不使用带有 r 值的 std::forward?”是非常不同的问题。首先是为初学者介绍 r 值,其次是为高级 C++ 用户讨论完美转发。我是meta-template library 和 lambda 库的作者,他们不需要对基础知识进行详细描述。答案中的信息与其他问题非常不同。
【问题讨论】:
-
你的问题是倒退的。 不需要 需要 std::forward 的情况有无数种。我认为您确实要求澄清何时准确使用 std::forward 。但是这个问题已经存在了。
-
@DDrmmr -- 这是不将
std::forward与 r 值一起使用的时候。我在标题中添加了说明。 -
@DDrmmr -- 只是想添加到我之前的评论中。这是关于完美转发,而不是关于 r 值基础。
标签: c++ c++11 parameter-passing perfect-forwarding