利用Lambda表达式,可以方便的定义和创建匿名函数。Lambda 表达式把函数看作对象。Lambda 表达式可以像对象一样使用,比如可以将它们赋给变量和作为参数传递,还可以像函数一样对其求值。
当一个函数需要将另一个函数用作参数时,可以使用 Lambda。
lambda表达式声明
含义说明
capture list:捕获外部变量列表
params list:形参列表
mutable指示符:用来说用是否可以修改捕获的变量
exception:异常设定
return type:返回类型
function body:函数体
基本语法
例如
例2 外部变量
Lambda表达式可以使用其可见范围内的外部变量,但必须明确声明(明确声明哪些外部变量可以被该Lambda表达式使用)。
例3 值捕获
值捕获和参数传递中的值传递类似,被捕获的变量的值在Lambda表达式创建时通过值拷贝的方式传入,因此随后对该变量的修改不会影响影响Lambda表达式中的值。
例4 引用捕获
使用引用捕获一个外部变量,只需要在捕获列表变量前面加上一个引用说明符&
例5 隐式捕获
让编译器根据函数体中的代码来推断需要捕获哪些变量,这种方式称之为隐式捕获。隐式捕获有两种方式,分别是[=]和[&]。[=]表示以值捕获的方式捕获外部变量,[&]表示以引用捕获的方式捕获外部变量。
隐式值捕获
隐式引用捕获
Lambda表达式参数说明
Lambda表达式的参数和普通函数的参数类似,但是Lambda表达式中传递参数还有一些限制,主要有以下几点:
- 参数列表中不能有默认参数
- 所有参数必须有参数名
- 不支持可变参数
例如
欢迎关注 https://www.zhihu.com/people/anxjing
若你对人工智能(CV/NLP)、C++/python编程、互联网就业及发展有兴趣,欢迎点赞关注和收藏。谢谢鼓励!!!
C++相关知识:
Anxjing.AI:C++ this_thread::sleep_forzhuanlan.zhihu.com
Anxjing.AI:C++ Lambda表达式zhuanlan.zhihu.com
Anxjing.AI:C++并发_condition_variablezhuanlan.zhihu.com
Anxjing.AI:生产者-消费者模型zhuanlan.zhihu.com
Anxjing.AI:C++预处理指令zhuanlan.zhihu.com
Anxjing.AI:C++工具:Cmakezhuanlan.zhihu.com
Anxjing.AI:SSH 学习zhuanlan.zhihu.com
Anxjing.AI:记录C++阶段性学习一zhuanlan.zhihu.com
Anxjing.AI:DesignPatterns C++:单例模式zhuanlan.zhihu.com
Anxjing.AI:C++基础:map简析zhuanlan.zhihu.com
Anxjing.AI:C++基础:memset函数简析zhuanlan.zhihu.com
Anxjing.AI:C++基础:break&continue区别zhuanlan.zhihu.com
Anxjing.AI:C++基础:指针和引用的区别zhuanlan.zhihu.com
Anxjing.AI:C++中::和:, .和->的作用和区别?zhuanlan.zhihu.com
Anxjing.AI:string中c_str()的使用方法和特性zhuanlan.zhihu.com
Anxjing.AI:C ++ strcpy()和strncpy()函数zhuanlan.zhihu.com
Anxjing.AI:C++基础-关键字virtualzhuanlan.zhihu.com
Anxjing.AI:C++基础-函数重载zhuanlan.zhihu.com
Anxjing.AI:C++基础-staticzhuanlan.zhihu.com
Anxjing.AI:C++基础:判断文件是否存在的方法zhuanlan.zhihu.com
Anxjing.AI:C++基础-strstr查找子串zhuanlan.zhihu.com
Anxjing.AI:C++基础:std::thread多线程zhuanlan.zhihu.com