以下两段代码都可以编译并按预期运行,它们有什么不同吗?
template<typename T, typename ...U>
auto time_function(T&& func, U&& ...args)
{
std::cout << "timing" << std::endl;
auto val = std::forward<T>(func)(std::forward<U...>(args...));
std::cout << "timing over" << std::endl;
return val;
}
template<typename T, typename ...U>
auto time_function(T&& func, U&& ...args)
{
std::cout << "timing" << std::endl;
auto val = std::forward<T>(func)(std::forward<U>(args)...);
std::cout << "timing over" << std::endl;
return val;
}
看着SO上的如何在可变参数函数中调用std::forward?,第二种方法似乎被推荐,但第一种方法不是也能实现同样的功能吗?