【发布时间】:2019-10-31 23:43:01
【问题描述】:
以下两个代码都按预期编译和执行,它们有什么不同吗?
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 How would one call std::forward on all arguments in a variadic function?,似乎推荐第二个,但第一个不也是这样做的吗?
【问题讨论】:
标签: c++ c++11 templates c++14 perfect-forwarding