#include <iostream>
std::string aaa = "111";
int main() {
// [] 称为lambda捕获列表,它的含义为:告诉编译器需要在匿名函数内部使用外部的变量。捕获列表中的内容控制着匿名函数对外部作用域的变量的访问权限。
// a、[] 空捕获
auto func_a = [](int x, int y) { return x + y; };
std::cout << func_a(3, 4) << std::endl;
// b、[x, y] 指定目标捕获
int x = 10, y = 20;
auto func_b = [x, y](int a, int b) {
return x + y + a + b;
};
std::cout << func_b(100, 200) << std::endl;
int a = 123;
int b = 321;
// c、[&] 引用捕获,可捕获所有能够访问到的变量(修改原值)
([&]() {
aaa = "222";
a = a + b;
b = a + b;
})();
// d、[=] 值捕获,可捕获所有能够访问到的变量(不能原值)
([=]() {
std::cout << a << std::endl;
std::cout << b << std::endl;
})();
std::string bbb = "333";
return 0;
}