我假设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
通过引用捕获。
我认为我已将x
和y
的值更改为77.因此,如果我调用qqq(),它将打印x: 77
。但是,它会打印x: 0
。
然后我改变了lambda表达式的位置:
int x = 0,y = 0;
+ x = y = 77;
auto qqq = [x, &y] {//...};
-
qqq();
按预期产生x:77。所以这只是有线,为什么lambda表达式是这样设计的?这是否意味着如果我想稍后重用lambda表达式,我必须再次编写它?