概述
1介绍
- Lambda表达式的引入标志,在‘[]’里面可以填入‘=’或‘&’表示该lambda表达式“捕获”(lambda表达式在一定的scope可以访问的数据)的数据时以什么方式捕获的,‘&’表示一引用的方式;‘=’表明以值传递的方式捕获,除非专门指出。
- Lambda表达式的参数列表
- Mutable 标识
- 异常标识
- 返回值
- “函数”体,也就是lambda表达式需要进行的实际操作
Lambda函数可以引用在它之外声明的变量. 这些变量的集合叫做一个闭包. 闭包被定义在Lambda表达式声明中的方括号[]内. 这个机制允许这些变量被按值或按引用捕获.下面这些例子就是:
[] //未定义变量.试图在Lambda内使用任何外部变量都是错误的.
[x, &y] //x 按值捕获, y 按引用捕获.
[&] //用到的任何外部变量都隐式按引用捕获
[=] //用到的任何外部变量都隐式按值捕获
[&, x] //x显式地按值捕获. 其它变量按引用捕获
[=, &z] //z按引用捕获. 其它变量按值捕获
2使用场景
2.1简化写法
//1.1vector数组求和
int main()
{
std::vector<int> some_list;
int total = 0;
for (int i = 0; i < 5; ++i) some_list.push_back(i);
std::for_each(begin(some_list), end(some_list), [&total](int x)
{
total += x;
});
return 0;
}
bool compare(int& a, int& b)
{
return a > b;
}
//1.2vector数组排序
int main(void)
{
int data[6] = { 3, 4, 12, 2, 1, 6 };
vector<int> testdata;
testdata.insert(testdata.begin(), data, data + 6);
//sort(testdata.begin(), testdata.end(), compare);
sort(testdata.begin(), testdata.end(), [](int a, int b) { return a > b; });
return 0;
}
2.2之前类中开启线程都需要通过静态成员函数,现在通过Lambda表达式,在中括号[this]中可以直接访问到类中的成员变量。
class A
{
public:
A();
~A();//析构
private:
std::unique_ptr<std::thread> monitorThread;
int a;
};
A::A()
{
monitorThread = make_unique<thread>([this] {
while (true)
{
cout << "i can access a " << a++ << endl;
Sleep(100);
}
});
}
A::~A()
{
}
最后
以上就是无聊灰狼为你收集整理的C++ 11中匿名函数(lambda表达式)说明及使用场景的全部内容,希望文章能够帮你解决C++ 11中匿名函数(lambda表达式)说明及使用场景所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复