转发右值有什么用?

时间:2017-01-09 08:12:27

标签: c++ templates forwarding-reference

我正在阅读cppreference中的std::forward条目。

对于std::forward的第二次重载,有一个例子:

template<class T>
void wrapper(T&& arg)
{
    foo(forward<decltype(forward<T>(arg).get())>(forward<T>(arg).get()));
}
     

arg的类型可能是

struct Arg
{
    int i = 1;
    int  get() && { return i; } // call to this overload is rvalue
    int& get() &  { return i; } // call to this overload is lvalue
};

但是forward<T>(arg).get()是左值还是右值可以在不使用std::forward的情况下进行区分(如果引用wrapper的{​​{1}}的参数是左值,{{1}是左值;否则是右值)。以下程序是一个支持:

arg

Running Result

那么外部forward<T>(arg).get()的用途是什么?

0 个答案:

没有答案