C++中Lambda的捕获
lambda表达式格式:
[ ]( )->{ };
捕获列表,参数列表,返回类型,函数体
第一种,[ ]中直接写入变量;
第二种,[ ]中写“=”;
第三种,[ ]中写“&”。
#include <iostream>
using namespace std;
int main()
{
cout << "Hello World!" << endl;
//===============================================
int m = 2;
int n = 9;
auto add = [m,n]()->int{
return m + n; //不需要在列表中写明,但是函数体中不能修改,只是拷贝,只可读。
};
int ret = add();
cout << ret << endl; //11
//================================================
//===============================================
int x = 12;
int y = 9;
auto minu = [=]()->int{
return x - y; //用[=],捕获以上所有外部变量,但函数体中不能修改,只是拷贝,只可读。
};
int ret1 = minu();
cout << ret1 << endl; //3
//================================================
int a = 2;
int b = 9;
auto mulp = [&]()->int{
++a;
return a * b; //[&],捕获以上所有,但是函数体中能修改。
};
int ret2 = mulp();
cout << ret2 << endl; //27
cout << a << endl; //3
//================================================
return 0;
}