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更快的一个例子。