在尝试创建递归 lambda 时,您在使用 auto 时遇到错误关键字来推断 lambda 的类型。但是,当您将 lambda 的类型显式声明为 std::function 时,代码编译成功。
自动类型推断:
使用 auto 时,编译器根据 lambda 的初始化推断其类型。然而,对于递归 lambda,lambda 闭包需要知道它正在捕获的类型(在本例中为 sum)。这会创建循环依赖,因为 lambda 的类型取决于其闭包的类型,而闭包的类型又取决于 lambda 的类型。
显式类型声明:
将 lambda 的类型声明为 std::function
递归函数:
修改后的代码段:
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 0x 中完全可行。它们只需要显式类型声明来克服类型推断问题。
以上是为什么 C 0x 中的递归 Lambda 函数需要显式类型声明?的详细内容。更多信息请关注PHP中文网其他相关文章!