lambda_c++11_浅析

C++11 – lambdas
lambdas其实就是匿名函数,一种编写函数的简便方式
优点:代码实现在其逻辑位置(调用的地方)(而不是在此范围之外的地方定义类/函数);不会污染namespace
简单例子:std::sort(v.begin(), v.end(), [](int a, int b) { return a > b; }); 降序排序

Syntax
【】:捕获列表,从外部传递(复制)到lambda表达式内部的变量们(类似于成员变量)
():形参列表 执行时传入
{}:code

简单例子:

int i = 0, j = 1;
auto func = [i, &j](bool b, float f){ ++j; cout << i << ", " << b << ", " << f << endl; };
func(true, 1.0f)

将lambda想象成 类 很有用

指定捕获方式:
【& 】(){ i = 0; j = 0; } 是一个lambda,它通过引用捕获i和j。 [&]的意思是“通过引用捕获函数中正在使用的所有变量
【=】(){ cout << k; }相似的, [=] 的意思是“通过值捕获函数中正在使用的所有变量
【&, i, j】(){} i j值捕获,其他引用捕获
【=, &i, &j】(){}. i j引用捕获,其他值捕获

在性能方面,Lambda也很棒。 因为它们是对象而不是指针,所以它们很容易被编译器inline,就像仿函数一样。 这意味着多次调用lambda(例如,使用std :: sort或std :: copy_if)比使用全局函数要好得多。 这是C ++实际上比C更快的一个例子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值