首页 >后端开发 >C++ >为什么 C 0x 中的递归 Lambda 函数需要显式类型声明?

为什么 C 0x 中的递归 Lambda 函数需要显式类型声明?

Susan Sarandon
Susan Sarandon原创
2024-12-14 10:39:15930浏览

Why Does a Recursive Lambda Function in C  0x Require Explicit Type Declaration?

C 0x 中的递归 Lambda 函数

错误和解决方案

在尝试创建递归 lambda 时,您在使用 auto 时遇到错误关键字来推断 lambda 的类型。但是,当您将 lambda 的类型显式声明为 std::function 时,代码编译成功。

推理

自动类型推断:

使用 auto 时,编译器根据 lambda 的初始化推断其类型。然而,对于递归 lambda,lambda 闭包需要知道它正在捕获的类型(在本例中为 sum)。这会创建循环依赖,因为 lambda 的类型取决于其闭包的类型,而闭包的类型又取决于 lambda 的类型。

显式类型声明:

将 lambda 的类型声明为 std::function解决了这个问题,因为函数对象本身不需要“知道”任何关于分配给它的内容。这允许 lambda 闭包捕获适当的类型,而无需依赖类型推断。

递归函数:

修改后的代码段:

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

sum = [term, next, &amp;sum](int a, int b) -> int {
    if (a > b)
        return 0;
    else
        return term(a) + sum(next(a), b);
};

证明递归 lambda 函数在 C 0x 中完全可行。它们只需要显式类型声明来克服类型推断问题。

以上是为什么 C 0x 中的递归 Lambda 函数需要显式类型声明?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn