代码如下:
#include <iostream>
using namespace std;void func(int x, int y)
{int a;int b;[=]() {int c = a;//使用了外部变量,[]里面加个 = int d = x;};
}int main()
{return 0;
}
lambda表达式的注意事项:
以上图片来自下面链接:
https://subingwen.cn/cpp/lambda/
代码如下:
#include<iostream>
using namespace std;void func(int x,int y)
{int a = 7;int b = 9;[=, &x]()mutable //因为b是只读的,我们无法修改它的值,所以加了mutable关键字,就可以修改了{int c = a;int d = x;b++;cout << "b = " << b << endl;}();cout << "b = " << b << endl;
}int main()
{func(1,2);return 0;
}
测试结果:
3.返回值
很多时候,lambda表达式的返回值是非常明显的,因此在C++11中允许忽略lambda表达式的返回值。
代码如下:
#include<iostream>
using namespace std;auto f = [](int a)->int
{return a + 10;
};auto f1 = [](int a)
{return a + 10;
};int main()
{cout << f(2) << endl;cout << f1(3) << endl;return 0;
}
测试结果:
代码如下:
//OK,可以自动推导出返回值类型
auto f = [](int a)
{return a ;
};//error,不能推导出返回值类型
auto f1 = []()
{return {1,2};//初始化列表作为函数返回值
};
以上图片来自下面链接:
https://subingwen.cn/cpp/lambda/
代码如下:
#include <iostream>
#include <functional>
using namespace std;void func(int x, int y)
{int a;int b;using ptr = void(*)(int);ptr p1 = [](int x){cout << "x = " << x << endl;};p1(11);//error 捕获了外部变量,所以不能看做函数指针/*ptr p2 = [=](int x){cout << "x = " << x << endl;}*/function<void(int)>fff = [=](int x){cout << "x = " << x << endl;};fff(1);//绑定function<void(int) > fff01 = bind([=](int x){cout << "x = " << x << endl;}, placeholders::_1);fff01(12);}int main()
{func(12,143);return 0;
}
测试结果: