gpt4 book ai didi

c++ - 折叠表达式 vs 编译递归

转载 作者:搜寻专家 更新时间:2023-10-31 02:03:18 30 4
gpt4 key购买 nike

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 reference)与其 c++11 版本做完全相同的工作printer_cpp11

在编译时,生成函数 printer_cpp11 的多个重载,而使用折叠表达式需要单个函数 printer

c++11 风格相比,使用折叠表达式在性能方面是否有优势?或者是否可以假设编译器内联 printer_cpp11 的所有重载,从而创建具有同等性能的代码?

最佳答案

由于内联,两个版本将导致相同的代码生成,因此运行时性能完全相同:https://gcc.godbolt.org/z/VIHTvZ (清除流困惑的代码)。

但是,与递归实例化相比,折叠表达式的编译时间和内存使用预计会更好,因此,折叠表达式通常是首选。更不用说它们还提供了更清晰、更易于推理的代码。

关于c++ - 折叠表达式 vs 编译递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55705215/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com