小工具知识网

当前位置: 首页 > 行业知识 > 【C++】C++11——lambda表达式

行业知识

【C++】C++11——lambda表达式

2026-11-05 09:14:26 来源:互联网转载

文章目录

    • 一、Lambda表达式引入
    • 二、Lambda表达式语法
    • 三、Lambda表达式交换两个值
    • 四、Lambda表达式底层原理

      一、Lambda表达式引入

      我们之前都是通过函数指针、仿函数的方式可以像函数使用的对象,在C++11之后,就有了Lambda表达式

      struct Goods{    string _name;    double _price;};struct Compare{    bool operator()(const Goods& gl, const Goods& gr)    {        return gl._price  g2._price; });//大于时降序return 0;}

      此时,每次调用sort函数我们只需要传入一个lambda表达式即可指明比较方式,大大提高了代码的可阅读性。下面,我们进入的环节是Lambda表达式的语法。


      二、Lambda表达式语法

      上面的代码就是用Lambda表达式解决的,我们清楚地可以看出Lambda表达式底层是匿名函数。

      Lambda表达式的格式:

      [capture-list] (parameters) mutable -> return-type { statement }

      Lambda表达式格式各项说明:

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

      (parameters):参数列表(非必写项)。与普通函数的参数列表一致,如果不需要参数传递,则可以连同()一起省略

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

      ->returntype:返回值类型(非必写项)。用追踪返回类型形式声明函数的返回值类型,没有返回值时此部分可省略。返回值类型明确情况下,也可省略,由编译器对返回类型进行推导

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

      除了捕捉列表外,Lambda表达式其他的地方和普通函数大致相同,Lambda表达式的参数列表和返回值可有可无,但是捕捉列表和函数体是必须写,不可省略的,所以最简单的Lambda表达式如下:

      int main(){[]{}; return 0;}

      在举个例子:两个int对象相加的Lambda表达式:

      int main(){//进行int对象相加的Lambda表达式    //Lambda——可调用对象//[](int x, int y)->bool {return x + y; };auto compare = [](int x, int y) {return x + y; };cout 

上一篇:银河麒麟服务器系统安装KVM和创建KVM虚拟机

下一篇:second的单词音节怎么写?