#if 1
#include <iostream>
using namespace std;
int fun(int a) {
return a + 1;
}
int fun_(int &a) {
return a + 1;
}
int main() {
int a = 9;
auto fun1 = [=]() { return a + 1; };
auto fun2 = [&]() { return a + 1; };
cout << "lamda 捕获" << endl;
cout << fun1() << endl; // 10
cout << fun2() << endl; // 10
cout << "lamda 捕获" << endl;
cout << "func 调用" << endl;
cout << fun(a) << endl; // 10
cout << fun_(a) << endl; // 10
cout << "func 调用" << endl;
cout << ++a << endl;
cout << "lamda 捕获" << endl;
cout << fun1() << endl; // 10
cout << fun2() << endl; // 11
cout << "lamda 捕获" << endl;
cout << "func 调用" << endl;
cout << fun(a) << endl; // 11
cout << fun_(a) << endl; // 11
cout << "func 调用" << endl;
// 总结: Lambda表达式中的捕获是在定义时进行的,因此每个Lambda表达式只会捕获一次外部变量。 注意跟函数调用的区别
return 0;
}
#endif
总结: Lambda表达式中的捕获是在定义时进行的,因此每个Lambda表达式只会捕获一次外部变量。 注意跟函数调用的区别