最佳答案
C + + 0x 展示了一个使用 std::forward
的示例:
template<class T>
void foo(T&& arg)
{
bar(std::forward<T>(arg));
}
什么时候使用 std::forward
总是有好处的?
此外,它需要在参数声明中使用 &&
,它在所有情况下都有效吗?我认为,如果函数的声明中包含 &&
,那么必须将临时变量传递给函数,所以可以用任何参数调用 foo 吗?
最后,如果我有一个这样的函数调用:
template<int val, typename... Params>
void doSomething(Params... args) {
doSomethingElse<val, Params...>(args...);
}
我应该用这个代替吗:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
}
另外,如果在函数中使用两次参数,即同时转发到两个函数,那么使用 std::forward
是否明智?难道 std::forward
不会将同样的内容转换为临时内存两次,移动内存并使其第二次使用无效吗?下面的代码可以吗:
template<int val, typename... Params>
void doSomething(Params&&... args) {
doSomethingElse<val, Params...>(std::forward<Params>(args)...);
doSomethingWeird<val, Params...>(std::forward<Params>(args)...);
}
我对 std::forward
有点困惑,我很乐意使用一些清理。