C ++ 11中的递归lambda函数
我是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:错误:' ((<lambda(int, int)>*)this)-><lambda(int, int)>::sum
'不能用作函数
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);};
有人可以点亮这个吗?
慕尼黑8549860
相关分类