Lambda 表达式

ops/2024/10/22 13:01:30/

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 表达式的函数体,包含需要执行的代码。
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;}
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调用错误写法:

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

正确写法: 

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

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

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
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;}
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;}

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


http://www.ppmy.cn/ops/127570.html

相关文章

mysql5.7.30绿色版安装

下载地址&#xff1a;MySQL :: Download MySQL Community Server (Archived Versions) 参考&#xff1a;【绿色版】Mysql下载、安装、配置与使用&#xff08;保姆级教程&#xff09;_mysql 绿色安装-CSDN博客 从下载地址中下载mysql&#xff0c;解压zip安装包&#xff0c;到想…

nginx中的HTTP 负载均衡

HTTP 负载均衡&#xff1a;如何实现多台服务器的高效分发 为了让流量均匀分配到两台或多台 HTTP 服务器上&#xff0c;我们可以通过 NGINX 的 upstream 代码块实现负载均衡。 方法 在 NGINX 的 HTTP 模块内使用 upstream 代码块对 HTTP 服务器实施负载均衡&#xff1a; upstr…

云服务器磁盘满了,清理docker无用缓存、容器等清理

docker system prune 命令用于清理 Docker 系统中的各种未使用资源。根据你提供的警告信息&#xff0c;这条命令将会移除以下内容&#xff1a; 所有已停止的容器&#xff08;all stopped containers&#xff09; 所有未被至少一个容器使用的网络&#xff08;all networks no…

Spring Boot 常见问题 50 问

1. Spring Boot 是什么&#xff1f;它与 Spring Framework 的关系是什么&#xff1f; Spring Boot 是基于 Spring Framework 的一个强大的开发框架&#xff0c;它应用于快速建立和部署 Spring 应用。Spring Boot 通过提供带有默认配置的「starter」&#xff0c;使开发者无需手…

面试题收集-Redis的关键知识点

1、什么是redis&#xff1f; Redis 是 C 语言开发的一个开源的高性能键值对&#xff08;key-value&#xff09;的内存数据库&#xff0c;可以用作数据库、缓存、消息中间件等。它是一种 NoSQL&#xff08;not-only sql&#xff0c;泛指非关系型数据库&#xff09;的数据库。 性…

数据结构6——树与二叉树

在本专栏的前五篇中&#xff0c;我们学习了顺序表、链表、栈和队列&#xff0c;他们本质上都是线性表。有线性表就存在非线性表&#xff0c;现在我们就来学习一下结构更复杂的非线性表——树。 1. 树的概念与结构 1.1 树的概念 树是一种非线性的数据结构&#xff0c;它是由n&…

sql获取时间差

MySQL SELECT TIMESTAMPDIFF(HOUR, 2023-10-01 12:00:00, 2023-10-02 15:30:00) AS hours_difference; PostgreSQL //EXTRACT(EPOCH FROM (2023-10-02 15:30:00::timestamp - 2023-10-01 12:00:00::timestamp)) // 获取的是两个时间相差的秒数&#xff0c;在此基础上除3600获…

HTML中src和href属性有什么区别

HTML中src和href属性都是用于指定资源地址&#xff0c;但在应用标签和资源加载方式有着区别。 src&#xff1a;指定加载的资源路径 应用标签&#xff1a;用于<script>、<img>、<video>、<audio>和<iframe>等标签中。资源加载方式&#xff1a; 当…