Tôi mới sử dụng C ++ 11. Tôi đang viết hàm lambda đệ quy sau, nhưng nó không biên dịch.
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;
}
dịch lỗi:
vimal @ linux-718q: ~ / Học / 09C ++ / c ++ 0x / lambda> g ++ -std = c ++ 0x sum.cpp
sum.cpp: Trong hàm lambda: sum.cpp: 18: 36: error: ' ((<lambda(int, int)>*)this)-><lambda(int, int)>::sum
' không thể được sử dụng làm hàm
phiên bản gcc
phiên bản gcc 4.5.0 20091231 (thử nghiệm) (GCC)
Nhưng nếu tôi thay đổi khai báo sum()
như bên dưới, nó hoạt động:
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);
};
Ai đó có thể xin vui lòng ném ánh sáng này?
mutable
từ khóa làm gì ở đó?
std::function<int(int,int)> sum = [&](int a, int b) {