首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++11中的递归lambda函数

C++11中的递归lambda函数
EN

Stack Overflow用户
提问于 2010-01-15 06:21:27
回答 10查看 100.9K关注 0票数 184

我是C++11的新手,我正在写下面的递归lambda函数,但是它不能编译。

sum.cpp

代码语言:javascript
运行
复制
#include <iostream>
#include <functional>

auto term = [](int a)->int {
  return a*a;
};

auto next = [](int a)->int {
  return ++a;
};

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

int main(){
  std::cout<<sum(1,10)<<std::endl;
  return 0;
}

编译错误:

vimal@linux-718q:~/Study/09C++/c++0x/lambda> g++ -std=c++0x sum.cpp

sum.cpp:在lambda函数中: sum.cpp:18:36: error:‘((<lambda(int, int)>*)this)-><lambda(int, int)>::sum’不能用作函数

gcc版

gcc版本4.5.0 20091231 (实验版) (GCC)

但是,如果我像下面这样更改sum()的声明,它就会起作用:

代码语言:javascript
运行
复制
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);
};

有没有人能帮我解释一下?

EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2067988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档