解决递归 Lambda 函数的编译问题
在尝试定义递归 lambda 函数时,以下代码无法编译:
auto sum = [term,next,&sum](int a, int b)mutable ->int { if(a>b) return 0; else return term(a) + sum(next(a),b); };
错误源于无法使用“auto”初始化捕获自身的 lambda 函数。自动类型推断无法确定 lambda 的返回类型,因为它取决于捕获的变量。
要纠正此问题,可以采取以下步骤:
使用完全指定的函数对象类型:
std::function<int(int,int)> sum = [term,next,&sum](int a, int b)->int { if(a>b) return 0; else return term(a) + sum(next(a),b); };
指定函数对象type 消除了自动类型推断的需要,允许编译器准确地确定返回类型。
稍后初始化函数对象:
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 函数无法编译,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!