#include <iostream>
typedef std::function<bool(int)> set;
using namespace std;
set singletonSet(int a) {
return [&] (int x) { return (a == x); };
}
bool contains(set s, int test) {
return s(test);
}
int main() {
auto first = singletonSet(5);
auto r1 = contains(first, 10);
auto r2 = contains(first, 5);
cout << r1 << " " << r2 << endl;
return 0;
}
我希望打印0 1
,但结果为1 1
初学c ++ labmda程序员如果这是一个基本错误,请提前对不起。
答案 0 :(得分:4)
不要通过引用捕获a
,按值捕获它。你是在lambda中存储一个悬空参考,然后使用它会导致UB。
set singletonSet(int a) {
return [=] (int x) { return (a == x); };
// ^
}