【问题标题】:c++ std::function returns unexpected valuec++ std::function 返回意外值
【发布时间】:2016-12-20 12:25:02
【问题描述】:
#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 程序员,如果这是一个基本错误,请提前道歉。

【问题讨论】:

  • [&amp;] 通过引用捕获 a,它在 return 语句之后死亡

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


【解决方案1】:

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

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

【讨论】:

  • @shaz 我的荣幸 :)
猜你喜欢
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2013-06-26
  • 2015-05-10
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 2020-06-24
相关资源
最近更新 更多