C ++ 11は初めてです。次の再帰的なラムダ関数を書いていますが、コンパイルできません。
sum.cpp
#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:ラムダ関数内:sum.cpp:18:36:エラー: ' ((<lambda(int, int)>*)this)-><lambda(int, int)>::sum
'は関数として使用できません
gccバージョン
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);
};
誰かがこれに光を当ててもらえますか?
mutable
そこではキーワードは何ですか?
std::function<int(int,int)> sum = [&](int a, int b) {