c ++ std :: function返回意外值

时间:2016-08-13 18:28:04

标签: c++ c++11 lambda functional-programming

#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程序员如果这是一个基本错误,请提前对不起。

1 个答案:

答案 0 :(得分:4)

不要通过引用捕获a,按值捕获它。你是在lambda中存储一个悬空参考,然后使用它会导致UB。

set singletonSet(int a) {
    return [=] (int x) { return (a == x); };
    //      ^
}