自学内容网 自学内容网

当我给面试官讲了lambda表达式...........

欢迎来到 破晓的历程的 博客

⛺️不负时光,不负己✈️

概念

lambda表达式实际上是一个匿名类的成员函数,该类由编译器为lambda创建,该函数被隐式地定义为内联。因此,调用lambda表达式相当于直接调用它的operator()函数,这个函数可以被编译器内联优化(建议)。

例如快速排序算法,STL允许用户自定义比较方式,在C++11之前,通常使用仿函数实现。但是代码一旦很长,使用之处和仿函数实现的地方相隔甚远,而且如果仿函数的命名不规范,很容易造成使用上的困难。

用法

C++11的lambda表达式是一种允许内联函数的特性,它可以用于不需要重用和命名的代码片段。lambda表达式的一般形式是:

[capture](parameters) mutable -> return_type { function_body }

接下来我们介绍一下不同部分:

  • [captureclause]:捕捉列表。该列表总是出现在lambda函数的开始位置,编译器根据[]来判断接下来的代码是否为lambda函数,捕捉列表能够捕捉上下文中的变量供lambda函数使用。

        - []:表示不捕获任何外部变量
        - [=]:以传值的方式捕获外部变量
        - [&]:以传引用的方式捕获外部变量
        - [this]:捕获外部的this指针
        - [=,&a]:以传值的方式捕获外部变量,但是以传引用的方式捕获变量a
        - [a,b]:以值传递的方式捕获外部变量a和b
        - [a,&b]:a以值传递的方式捕获,b以引用的方式捕获
    
  • (parameters):参数列表。与普通函数的参数列表一致,如果不需要参数传递,则可以连同()一起省略。

  • mutable:默认情况下,lambda函数总是一个const函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略(即使参数为空)。

  • ->return-type:返回值类型。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可以省略。返回值类型明确情况下,也可省略,由编译器对返回类型进行推导。

  • {statement}:函数体。在该函数体内,除了可以使用其参数外,还可以使用所有捕获到的变量。

示例

int main()
{
auto func = []()->void {cout << "hello world"<<endl; };
func();
}

如下:

在这里插入图片描述
其实,lambdo的本质就是重载了()


原文地址:https://blog.csdn.net/2301_79181030/article/details/142759494

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!