Lambda 表达式

Lambda 表达式是 C++11 引入的一种匿名函数的方式,它允许你在需要函数的地方内联地定义函数,而无需单独命名函数

复制代码
[capture clause](parameters) -> return_type {
 // 函数体
// 可以使用捕获列表中的变量
return expression; // 可选的返回语句
}
  • 捕获列表(Capture clause):用于捕获外部变量,在 Lambda 表达式中可以访问这些变量。捕获列表可以为空,也可以包含变量列表 [var1, var2, ...]。
  • 参数列表(Parameters):与普通函数的参数列表类似,可以为空或包含参数列表param2, ...)。
  • 返回类型(Return type):Lambda 表达式可以自动推断返回类型auto,也可以显式指定返回类型 > return_type。如果函数体只有一条返回语句,可以省略返回类型。
  • 函数体(Body):Lambda 表达式的函数体,包含需要执行的代码。
cpp 复制代码
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [](int a,int b)->int{
        return a+b;
    };
    int c=add(x,y);
    cout<< c;
    return 0;

}
cpp 复制代码
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto max = [](int a,int b)->auto{
        return a  > b;
    };
    cout << max;
    return 0;

}

lambda调用错误写法:

cpp 复制代码
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [x,y]()->int{
        return x+y;
    };
    cout << add;
    return 0;

}

正确写法:

cpp 复制代码
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [x,y]()->int{
        return x+y;
    };
    cout << add();
    return 0;

}

这种方式捕获变量是不能修改变量的,只可读

cpp 复制代码
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [x,y]()->int{
        //x++;
        //x = 15;//这种方式捕获变量是不能修改变量的,只可读
        return x+y;
    };
    int ret = add();
    cout << ret;
    return 0;

}

|-----------|----------------------|
| 捕获形式 | 含义 |
| [ ] | 空捕获(全局和局部静态仍然可见) |
| [=] | 隐式值捕获,值捕获lambda前面的变量 |
| [names] | 一个逗号分隔的捕获变量列表 |
| [&] | 隐式引用捕获 |
| [&,a] | 除了a外的所有外部变量都为引用 |
| [&x,y] | 按引用捕获x,按值捕获y |

cpp 复制代码
int main(int argc, char *argv[])
{
    static int x=10,y=200;
    auto add = []()->int{
        return x+y;
    };
    int a=10;
    int ret = add();
    cout << ret;
    return 0;

}
cpp 复制代码
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [&,y]()->int{
        x++;
        return x+y;
    };
    int a=10;
    int ret = add();
    cout << ret;
    return 0;

}
cpp 复制代码
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [&x,y]()->int{// 按引用捕获x,按值捕获y
        x++;
        return x+y;
    };
    int a=10;
    int ret = add();
    cout << ret;
    return 0;

}
相关推荐
田梓燊2 小时前
力扣:23.合并 K 个升序链表
算法·leetcode·链表
re林檎3 小时前
算法札记——4.27
算法
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
数据牧羊人的成长笔记3 小时前
逻辑回归与Softmax回归
算法·回归·逻辑回归
郑州光合科技余经理4 小时前
同城O2O海外版二次开发实战:从支付网关到配送算法
开发语言·前端·后端·算法·架构·uni-app·php
Mrlxl.cn6 小时前
计算机网络——网络层
c语言·数据结构·计算机网络·考研
d111111111d7 小时前
STM32-UART封装问题解析
笔记·stm32·单片机·嵌入式硬件·学习·算法
寒秋花开曾相惜7 小时前
(学习笔记)4.2 逻辑设计和硬件控制语言HCL(4.2.1 逻辑门&4.2.2 组合电路和HCL布尔表达式)
linux·网络·数据结构·笔记·学习·fpga开发
Jiangxl~8 小时前
IP数据云如何为不同行业提供精准IP查询与风险防控解决方案?
网络·网络协议·tcp/ip·算法·ai·ip·安全架构
李伟_Li慢慢8 小时前
wolfram详解山峦算法
前端·算法