Eu sou novo no C ++ 11. Estou escrevendo a seguinte função lambda recursiva, mas ela não é compilada.
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;
}
Erro de compilação:
Para obter mais informações, consulte a página de suporte do Microsoft Visual Studio.
sum.cpp: Na função lambda: sum.cpp: 18: 36: erro: ' ((<lambda(int, int)>*)this)-><lambda(int, int)>::sum
' não pode ser usado como uma função
versão gcc
gcc versão 4.5.0 20091231 (experimental) (GCC)
Mas se eu alterar a declaração sum()
como abaixo, ela funcionará:
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);
};
Alguém poderia por favor esclarecer isso?
mutable
palavra - chave está fazendo lá?
std::function<int(int,int)> sum = [&](int a, int b) {