首页 >后端开发 >C++ >为什么我的递归 Lambda 函数无法编译,如何修复?

为什么我的递归 Lambda 函数无法编译,如何修复?

Patricia Arquette
Patricia Arquette原创
2024-12-13 13:46:11870浏览

Why Does My Recursive Lambda Function Fail to Compile, and How Can I Fix It?

解决递归 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 的返回类型,因为它取决于捕获的变量。

要纠正此问题,可以采取以下步骤:

  1. 使用完全指定的函数对象类型:

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

    指定函数对象type 消除了自动类型推断的需要,允许编译器准确地确定返回类型。

  2. 稍后初始化函数对象:

    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 函数无法编译,如何修复?的详细内容。更多信息请关注PHP中文网其他相关文章!

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