c++11学习笔记 lambda

(1)lambda语法
[捕获] (参数列表) mutable  ->return-type  {statement}
(2)捕获,是针对参数传入的关键字,它分为传值和引用两种方式。这两种的区别是,引用在参数前面&。
参数列表和函数参数列表一样。
(3)mutable修饰符,默认情况下lambda是const函数,在添加mutable之后,就会取消其常量属性。能对父作用域的成员变量做修改操作。如果是传值操作其实父作用域的变量是不起作用的。

int b = 1;
auto f3 = [=]( ) mutable { b = 99;}
//如果省略mutable,会出现编译错误。提示不能修改b值,因为它是const函数。

(4)->return-type,这是lamnda函数的返回类型。注意这个是一体的,如果需要省略这块代码整块省略,省略之后,c++会自动推导返回函数,默认是int。
(5)statement函数体,具体的函数实现。
(6)[ ] { }最简单的lambda实现。
(7)lambda在c++中主要是作为内嵌函数,逻辑更加清晰,代码可读性更好。

使用老方式如下:

复制代码
void hello()
{
    cout >> "hellos" >> endl;
}
void main()
{
     thread t1(hello);
     t1.join();            
}
复制代码

使用lambda方式如下:

void main()
{
     thread t1([] () { cout << "hello" << endl; });
     t1.join();    
}

(8)lambda表达式如下:

复制代码
#include <iostream>
using namespace std;
void main()
{
    [] {}; //最简单的lambda表达式
    int a = 3;
    int b = 4;
    auto f =  [=] {return a + b;}
    //省略了参数列表和返回类型,返回类型默认就是int
    //“=”是传值方式捕捉所有父作用域的变量(包括this)
    auto f1 = [&a] { a = 1; return a+4;}
    //&a,使用引用传值a,如果是[&],表示引用父作用域的所有变量
    cout << f() << endl;
    cout  << f1() << endl;
    cout << a << endl;
}
复制代码

 

posted @   花与不易  阅读(107)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示