我是C++11的新手。我正在编写下面的递归lambda函数,但它无法编译。
#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:错误:“__abc0 ”不能用作函数
GCC版本4.5.0 20091231(实验)(GCC)
但是,如果我将sum()
的声明更改如下,它就会起作用:
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);
};
有人能解释一下吗?