Lambda 表达式是 C++ 11 最重要也是最常用的特性之一,是现代编程语言的一个特点,简洁,提高了代码的效率 Lambda 表达式就是一个匿名函数, 他的语法格式如下:
[capture](params) opt -> ret {body;};
- capture: 捕获列表
- params: 参数列表
- opt: 函数选项
- ret: 返回值类型
- body: 函数体
第一个参数,捕获列表,含有以下三种分类 [ ] 不捕捉任何变量 [&] 捕获外部作用域中所有变量,并作为引用在函数体内使用 (按引用捕获) [=] 捕获外部作用域中所有变量,并作为副本在函数体内使用 (按值捕获)\
第一种方式:定义匿名函数
这次在qt上运行,若需要改为c++版本,直接将qDebug()改为cout<<
匿名函数的定义,代码执行这个匿名函数是不会被调用的
[]()
{
qDebug()<<"hello,I am a lambda表达式";
};
显示输出不会有任何结果
第二种方式:调用匿名函数
int a=100,b=200,c=300;
[&]()
{
qDebug()<<"hello,I am a lambda表达式";
qDebug()<<"使用引用的方式传递数据";
qDebug()<<"a+1:"<<++a<<",b+c="<<b+c;
}();
显示输出
第三种方式:拷贝匿名函数
[=](int m,int n)mutable
{
qDebug()<<"hello,I am a lambda表达式";
qDebug()<<"使用拷贝的方式传递数据";
qDebug()<<"a+1:"<<++a<<",b+c="<<b+c;
qDebug()<<"m+1"<<++m<<",n"<<n;
}(1,2);
在此为了完成对变量实现写操作,在opt上加mutable,允许在匿名函数体内部来使用只读数据,可以修改按值传递进来的拷贝
|