C++匿名函数
1. 概述
匿名函数也称为lambda函数或lambda表达式,最简单的匿名函数形式:{}
[]:捕获函数外部的变量
():匿名函数的参数
{}:匿名函数的执行体
#include <iostream>
using namespace std;
int main()
{
auto func = [] () { cout << "Hello world"; };
func(); // now call the function
}
2. lambda表达式
[capture](parameters)->return-type{body}
[](int x, int y) -> int { int z = x + y; return z; }
xxx.set_cb([](parameter a, parameter b)->int{
//todo
});
如果参数没有的话()是可以省略的,如果返回类型为void也可以省略-> void。
3. lambda函数中的变量截取
- [] //不截取任何变量,试图在Lambda内使用任何外部变量都是错误的(全局变量除外).
- [&] //截取外部作用域中所有变量,并作为引用在函数体中使用
- [=] //截取外部作用域中所有变量,并拷贝一份在函数体中使用
- [=, &foo] //截取外部作用域中所有变量,并拷贝一份在函数体中使用,但是对foo变量使用引用
- [bar] //截取bar变量并且拷贝一份在函数体重使用,同时不截取其他变量
- [this] //截取当前类中的this指针。如果已经使用了&或者=就默认添加此选项。
- [x, &y] //x 按值捕获, y 按引用捕获.
- [&, x] //x显式地按值捕获. 其它变量按引用捕获
- [=, &z] //z按引用捕获. 其它变量按值捕获
...