首页 > 后端开发 > C++ > 为什么 C 中的递归 Lambda 函数会导致编译错误以及如何解决?

为什么 C 中的递归 Lambda 函数会导致编译错误以及如何解决?

Barbara Streisand
发布: 2024-12-19 18:23:09
原创
537 人浏览过

Why Do Recursive Lambda Functions in C   Cause Compilation Errors, and How Can They Be Resolved?

C 中的递归 Lambda 函数:编译困境

在设计递归 lambda 函数时,您可能会遇到编译错误。让我们深入研究当前的问题并探索其解决方案。

提供的 lambda 函数 sum 会在一系列值上累积数学运算项的结果。为了使其递归,您尝试通过引用捕获 lambda 之和:[term, next, &sum](int a, int b)。

但是,这种方法会导致编译错误。这是由使用 auto 声明的 lambda 函数与完全指定类型的 lambda 函数之间的根本区别引起的。

使用 auto 推断的 Lambda 函数从其初始化中派生出其类型。但是,在创建递归 lambda 时,lambda 还没有自己的类型。这会产生冲突:lambda 的闭包需要知道其类型,但尚未确定它。

要解决此问题,请使用 std::function 显式定义 lambda 的类型;.这使得 lambda 的闭包拥有完整的类型信息,使其能够通过引用捕获 lambda 之和。

修改后的代码:

std::function<int(int, int)> sum;

sum = [term, next, &sum](int a, int b) -> int {
    if (a > b)
        return 0;
    else
        return term(a) + sum(next(a), b);
};
登录后复制

此修改为编译器提供了必要的类型信息,允许递归 lambda 函数按预期编译和执行。

以上是为什么 C 中的递归 Lambda 函数会导致编译错误以及如何解决?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板