外部变量访问方式说明符
[] 不捕获任何变量
[&] 以引用方式捕获所有变量
[=] 用值的方式捕获所有变量(可能被编译器优化为const &)
[=, &foo] 以引用捕获foo, 但其余变量都靠值捕获
[&, foo] 以值捕获foo, 但其余变量都靠引用捕获
[bar] 以值方式捕获bar; 不捕获其它变量
[this] 捕获所在类的this指针
[] (int x, int y) { return x + y; } // 隐式返回类型
[] (int& x) { ++x; } // 没有 return 语句 -> Lambda 函数的返回类型是 'void'
[] () { ++global_x; } // 没有参数,仅访问某个全局变量
[] (int x, int y) -> int { int z = x + y; return z; } //指定返回类型
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iomanip>
#include<algorithm>
#include<map>
#include<vector>
#include<set>
using namespace std;
/*外部变量访问方式说明符
[] 不捕获任何变量
[&] 以引用方式捕获所有变量
[=] 用值的方式捕获所有变量(可能被编译器优化为const &)
[=, &foo] 以引用捕获foo, 但其余变量都靠值捕获
[&, foo] 以值捕获foo, 但其余变量都靠引用捕获
[bar] 以值方式捕获bar; 不捕获其它变量
[this] 捕获所在类的this指针
*
* 捕获的最后一个赋值的
* */
int main() {
int n = 10000, m, x, y;
auto a = [&](int a, int b) {return a + b + n;};
n = 1000000;
auto b = [&n](int a, int b){return a + b + n;};
cout << typeid(a).name() << endl;
cout << typeid(b).name() << endl;
cout << a(1, 2) << endl;
cout << b(1, 2) << endl;
return 0;
}
#include<iostream>
#include<functional>
using namespace std;
auto add = [](int a, int b) -> long long { //auto自动推导 , ->long long指定返回类型
return a + b;
};
auto Data = [](int a, int b) { //auto推导Data是lambda表达式类的对象
return [=](auto func) { //func参数可以是lambda表达式。
return func(a, b);
};
};
auto First = [](int a, int b) {
return a;
};
auto Second = [](int a, int b) {
return b;
};
auto Add = [](int a, int b) {
return a + b;
};
auto Max = [](int a, int b) {
return max(a, b);
};
auto is_in = [](int a, int b) {
return [=](int x) {
return a <= x && x <= b;
};
};
auto OR = [](auto u, auto v) {
return [=](int x) {
return u(x) || v(x);
};
};
auto NOT = [](auto u) {
return [=](int x) {
return !u(x);
};
};
auto is_little = is_in('a', 'z');
auto is_upper = is_in('A', 'Z');
auto is_digit = is_in('0', '9');
auto is_alpha = OR(is_little, is_upper);
auto other = NOT(is_alpha);
function<int()> Temp_Func() {
int a = 23;
return [=]() -> int {
return a;
};
}
int main() {
cout << is_little('A') << endl;
cout << is_little('a') << endl;
cout << is_alpha('a') << endl;
cout << is_alpha('A') << endl;
cout << other('A') << endl;
cout << other('9') << endl;
cout << add(2, 4) << endl;
auto func = Temp_Func();
cout << func() << endl;
auto a = Data(rand() % 1000, rand() % 1000); //a是对象
cout << a(First) << endl;
cout << a(Second) << endl;
cout << a(Add) << endl;
cout << a(Max) << endl;
return 0;
}