C++中Lambda表达式有什么用
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要为大家展示了"C++中Lambda表达式有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++中Lambda表达式有什么用"这篇文章吧。
千家信息网最后更新 2025年11月07日C++中Lambda表达式有什么用
这篇文章主要为大家展示了"C++中Lambda表达式有什么用",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++中Lambda表达式有什么用"这篇文章吧。
概述
C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:
[捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体}//计算两个值的和auto func = [](int a, int b) -> int{return a+b;};//当返回值的类型是确定时,可以忽略返回值auto func = [](int a, int b){return a + b;};//调用int sum = func(1, 3);语法分析
捕获列表
Lambda 表达式相当于一个类,那么捕获列表就是传递给这个类的类成员。比如:
class Labmda{public: const int test; Labmda(int value):test(value) { }public: int run(int a, int b) { return a + b + test; }}int main(){ int test = 10; auto func = Labmda(test); int sum = func.run(1, 3);}//使用Lambda 表达式的写法int main(){ int test = 10; auto func = [test](int a, int b){return a + b + test;}; int sum = func(1, 3);}捕获列表有以下格式:
| 格式 | 描述 |
|---|---|
| [] | 不带任何参数 |
| [=] | Lambda表达式之前的局部变量,包括所在类的this,变量按值方式传递 |
| [&] | Lambda表达式之前的局部变量,包括所在类的this,变量按引用方式传递 |
| [this] | Lambda表达式所在类的this |
| [a] | Lambda表达式之前的局部变量a的值,也可以传入多个值,如[a , b] |
| [&a] | Lambda表达式之前的局部变量a的引用 |
关键字声明
关键字声明一般都很少用到,也不建议随便使用,可以忽略不计。
mutable
当捕获列表以值的方式传递时有效,加上此关键字后,可以修改Lambda类成员(带const修饰符)。比如:
int test = 10;//编译报错,test成员不能修改auto func = [test](int a, int b){test = 8; return a + b + test;}; //编译正常auto func = [test](int a, int b)mutable {test = 8; return a + b + test;};这里需要注意的是:Lambda类成员test修改之后,并不会改变外部int test的值。
exception
exception 声明用于指定函数抛出的异常,如抛出整数类型的异常,可以使用 throw(int)
示例
捕获列表按值传递
int test = 10;auto func = [=](int a, int b){return a + b + test;};auto func2 = [test](int a, int b){return a + b + test;};int sum = func(1, 3); //sum等于14这里需要注意的是func表达式中test的值只更新到表达式之前:
int test = 10;auto func = [=](int a, int b){return a + b + test;};test = 5;int sum = func(1, 3); //sum还是等于14捕获列表按引用传递
int test = 10;auto func = [&](int a, int b){test = 5; return a + b + test;};auto func2 = [&test](int a, int b){test = 5; return a + b + test;};int sum = func(1, 3); //sum等于9,test等于5这里func表达式中test的值就能随时更新:
int test = 10;auto func = [&](int a, int b){return a + b + test;};test = 5;int sum = func(1, 3); //sum等于9,test等于5以上是"C++中Lambda表达式有什么用"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
表达式
变量
C++
局部
成员
关键
关键字
内容
函数
所在
方式
篇文章
类型
参数
格式
语法
学习
帮助
更新
编译
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
cbfs 数据库
网络安全动漫图片适合小学的大全
监督网络安全app
安卓 地图服务器
ark建服务器
网络直销软件开发
数据库影响因子if
青社网络技术
美国网络安全法规
服务器 文件的管理软件
数据库 安全级别
3d打印切片软件开发
检验科网络安全与应急预案
比服务器的稳定
oracle免费永久数据库
数据库附加不成功错误948
取个互联网科技公司名字
oracle数据库用户锁了
app网站共用数据库
ftp服务器的实现
网络安全教育团课心得六百字
浙大网络安全法
北京软件开发厂家现货
利用SQL语句建立SPJ数据库
日本代理服务器整机租用
数据库应用技术教材答案
hp服务器报错303
数据库查询前2天数据
游戏软件开发学费
火爆的互联网科技