我们c++17
有折叠表达式,它可以极大地简化可以使用编译器递归和 SFINAE 或重载来实现的代码。例如,在下面的代码中
#include <iostream>
#include <utility>
template<typename ...Args>
void printer(Args&&... args) {
(std::cout << ... << args) << '\n';
}
void printer_cpp11() { }
template <typename First, typename ...Args>
void printer_cpp11(First&& first, Args&&... args)
{
std::cout << first;
printer_cpp11(std::forward<Args>(args)...);
}
int main()
{
printer(3, 4, "hello");
std::cout << std::endl;
printer_cpp11(3, 4, "hello");
return 0;
}
该c++17
函数printer
(取自cpp 参考c++11
)的工作与其版本完全相同printer_cpp11
。
在编译时,会生成函数的几个重载,而使用折叠表达式需要printer_cpp11
一个函数。printer
c++11
在使用 fold 表达式而不是-style时在性能方面有优势吗?或者可以假设编译器内联 的所有重载printer_cpp11
,从而创建具有同等性能的代码?