C++细节满满地lambda表达式讲解!

Posted zhaocx111222333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++细节满满地lambda表达式讲解!相关的知识,希望对你有一定的参考价值。

格式

lambda表达式书写格式:[capture-list] (parameters) mutable -> return-type { statement }
[捕捉列表] (参数列表) 取消常量性 -> 返回值类型{函数体}

lambda项目细节说明
捕捉列表作为lambda表达式的起始标志,可以捕捉上下文中的变量供lambda函数使用
参数列表与普通函数的参数列表一致,如果不需要参数传递,则可以连同()一起省略
mutable默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。使该修饰符时,参数列表不可省略(即使参数为空)。
-> 返回值类型返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。返回值类型明确情况下,也可省略,由编译器对返回类型进行导。
{函数体}函数体。在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量

捕捉列表说明:

捕捉列表说明
[var]表示值传递方式捕捉变量var
[=]表示值传递方式捕获所有父作用域中的变量(包括this)
[&var]表示引用传递捕捉变量var
[&]表示引用传递捕捉所有父作用域中的变量(包括this)
[this]表示值传递方式捕捉当前的this指针

注意捕捉列表可以连续取内容,但不允许连续捕捉(在捕捉全部值的基础上,再次捕捉值,相反。引用就可以)
父作用域就是包含lambda表达式的呢一块代码{};

细节及使用

在块作用域以外的lambda函数捕捉列表必须为空(全局)
在这里插入图片描述
值传递不改变内容:
在这里插入图片描述

这两个例子来源网络,做一下理解:
在这里插入图片描述
在这里插入图片描述

作为仿函数

lambda表达式在作为自定义类型的仿函数时,相当于重载了()的类
和真正的仿函数底层是一个原理.–>就是实例化一个仿函数对象,调用括号运算符重载.

以上是关于C++细节满满地lambda表达式讲解!的主要内容,如果未能解决你的问题,请参考以下文章

c++中lambda表达式用法

c++中lambda表达式用法

C++里使用二分法查找和lambda表达式进行比较

c++基础(lambda)

Python:lambda表达式和yield关键字理解与使用讲解

python的lambda表达式详细讲解