通过通用引用传递的函数的std :: forward?

时间:2014-04-25 16:34:36

标签: c++ c++11 lambda perfect-forwarding universal-reference

考虑以下两点:

template <class Function>
void apply(Function&& function)
{
    std::forward<Function>(function)();
}

template <class Function>
void apply(Function&& function)
{
    function();
}

在什么情况下会有区别,它有什么具体的区别?

1 个答案:

答案 0 :(得分:12)

如果Function的{​​{1}}具有引用限定符,则会有所不同。使用operator(),传播参数的值类别,如果没有它,则值类别将丢失,并且函数将始终作为l值调用。 Live Example

std::forward