何时使用STD::转发到转发参数?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (7)

C ++ 0x显示了一个使用的例子std::forward

template<class T>
void foo(T&& arg) 
{
  bar(std::forward<T>(arg));
}

std::forward总是用什么时候有利?

另外,它需要&&在参数声明中使用,它在所有情况下都有效吗?我以为你必须通过临时函数,如果函数声明与&&它在一起,所以可以调用任何参数?

最后,如果我有这样的函数调用:

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)...);
}
提问于
用户回答回答于

像你的第一个例子一样使用它:

template <typename T> void f(T && x)
{
  g(std::forward<T>(x));
}

template <typename ...Args> void f(Args && ...args)
{
  g(std::forward<Args>(args)...);
}

扫码关注云+社区