为什么我的lambda函数无法执行?

时间:2019-11-02 08:51:27

标签: c++ lambda

我有以下功能,这是由main调用的。但是我看不到执行lambda函数。

int LambdaTest(int x, int y, bool bLambda) {
 cout << "Lambda Rxd : " << bLambda << endl;
 if (bLambda) {
  return x + y;
 } else {
  return ((x > y) ? (x - y) : (y - x));
 }
}

int main() {
 int x = 10, y = 30;
 int val = -1;

 val = LambdaTest(x, y, [](int x) -> bool {
  return x > 15;
 });
 cout << "Lambda test 1: " << val << endl;

 val = LambdaTest(x, y, [](int y) -> bool {
  return y > 15;
 });
 cout << "Lambda test 2: " << val << endl;

 return 0;
}

在这个主要函数中,我期望作为函数调用的第三个参数传递的lambda函数将执行并返回true或false。

但是我看不到正确的值传递给函数主体。

还有什么需要做的吗?

1 个答案:

答案 0 :(得分:1)

您有无状态的lambda。

无状态lambda可以转换为函数指针。因此,您的lambda会转换为void (*)(int),并且此指针分配给bool,从而始终得到true

要“即时”调用lambda,您需要添加带有参数的()

 val = LambdaTest(x, y, [](int x) -> bool {
  return x > 15;
 }(x) ); // <---
 cout << "Lambda test 1: " << val << endl;

 val = LambdaTest(x, y, [](int y) -> bool {
  return y > 15;
 }(y) ); // <---


[](){} -> bool ( /*here passed arguments */ );

另一种解决方案是将lambda表达式生成的函子存储在某个变量中,然后在该对象上应用()

 auto l1 = [](int x) -> bool {
  return x > 15;
 };

 val = LambdaTest(x, y, l1(x));
 cout << "Lambda test 1: " << val << endl;