c++std::函数返回意外值

c++ std::function returns unexpected value

本文关键字:意外 函数 c++std 返回      更新时间:2023-10-16
#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程序员非常抱歉。

不要通过引用捕获a,而是通过值捕获。照原样,您将在lambda中存储一个悬空引用,稍后使用它将导致UB。

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