考虑以下两点:
template <class Function>
void apply(Function&& function)
{
std::forward<Function>(function)();
}
和
template <class Function>
void apply(Function&& function)
{
function();
}
在什么情况下会有区别,它有什么具体的区别?
答案 0 :(得分:12)
如果Function
的{{1}}具有引用限定符,则会有所不同。使用operator()
,传播参数的值类别,如果没有它,则值类别将丢失,并且函数将始终作为l值调用。 Live Example
std::forward