Lambda Expression是否只是在它之前捕获对象?

时间:2018-05-12 02:43:21

标签: c++ lambda

我假设C ++中的lambda表达式只是一个匿名函数。因此,每次调用它都会像调用其他普通函数一样。

然后我想出了这段代码:

int x = 0,y = 0;
auto qqq = [x, &y] {
    std::cout << "x: " << x << std::endl;
    std::cout << "y: " << y << std::endl;
    ++y;
};

x = y = 77;
qqq();
qqq();
std::cout << "final y:" << y << std::endl;

x按值捕获,y通过引用捕获。 我认为我已将xy的值更改为77.因此,如果我调用qqq(),它将打印x: 77。但是,它会打印x: 0

然后我改变了lambda表达式的位置:

  int x = 0,y = 0;
+ x = y = 77;
  auto qqq = [x, &y] {//...};
-
  qqq();

按预期产生x:77。所以这只是有线,为什么lambda表达式是这样设计的?这是否意味着如果我想稍后重用lambda表达式,我必须再次编写它?

0 个答案:

没有答案