C++ Lambda表达式

一、解释

Lambda表达式是C++11引入的一种匿名函数的形式,他允许你在需要函数的地方内联的定义函数,而无需单独命名函数。

二、Lambda表达式基本语法如下:

[捕获列表]          (参数列表)    ->返回类型

[ capture clause ] (parpameters) -> return_tybe

 {

       函数体;

 }

三、Lambda表达式由以下部分构成

(1)捕获列表: Lambda表达式可以自动推断返回类型(auto 关键字),也可以显示指定                                返回类型 。

(2)参数列表

(3)返回类型:Lambda表达式可以自动推断返回类型,也可以显示指定返回类型

                           -> return_tybe(如果Lambda表达式的函数体只有一条return语句,并且                               能够根据返回值推断出返回类型,那么也可以省略尾置返回类型,让编译                               器自动推断返回类型。

(4)函数体


附示例程序:

求两数之和。(用Lambda表达式)

/*
    使用Lamada表达式求两数之和
    Add()函数与Lambda表达式比较
*/

#include <iostream>

using namespace std;

/*
//求两数之和函数
int Add(int num1,int num2)
  {
     return num1 + num2;
  }
*/


int main()
{
    int num1;
    int num2;

   //预测函数的返回值 = [捕获列表](参数列表)->返回类型
   //auto Add   给匿名函数起个名字
    auto Add = [](int num1,int num2) ->int   
      {
         return num1 + num2;
      };
    cout << "请分别输入数字a和数字b:" << endl;
    cin >> num1 >> num2;
    cout << "两数之和为:" <<Add(num1,num2);

    return 0;
}

注:这里的      auto Add = [](int num1,int num2) ->int {return num1 + num2;};

为什么最后不加分号会报错,我查到的是不用加分号。要是有大佬浏览到这个

帖子,帮我解惑!!!


 求两数最大值。(用Lambda表达式)

Lambda表达式在下文代码中的作用:

Lambda表达式在回调函数中的主要作用是简化代码,使代码更加清晰和易读。通过Lambda表达式,你可以在需要时定义和使用一个匿名的函数,而不必显式地定义一个单独的函数。这对于一次性使用的简单回调函数非常有用,避免了为每个简单的回调函数都创建一个独立的函数的繁琐。

/*
      使用Lambda表达式求两数最大值(回调函数)
*/
#include <iostream>
using namespace std;
/*
bool Max(int num1,int num2)
  {
     return num1 > num2;   //如果num1 > num2,则返回真
  }
*/

int getMax(int num1,int num2,bool(*Max)(int num1,int num2))
   {
         if(Max(num1,num2))
          {
             return num1;
          }
         else
          {
             return num2;
          }
   }

int main()
{
   int num1;
   int num2;
   cout << "请分别输入需要比较的两数:" << endl;
   cin >> num1 >> num2;
   cout << getMax(num1,num2,[](int num1,int num2)->bool
                                    {return num1>num2;});
    return 0;
}

四、参数捕捉  【重点内容】

1、示例代码:

#include <iostream>

using namespace std;

int main()
{
    int x = 10;
    int y = 20;

    auto add = [x,y]()->int
               {
                   return x + y;
               };

    cout << add();

    return 0;
}

2、捕获列表设置方式(三种)

(1)捕获上下文中指定的参数

   auto add = [x,y]()->int

                              {

                                     return x+y

                              }; 

            捕获是能修改变量值的,只能使用。

(2)捕获外部作用域中的所有变量

   auto add = [=]()->int

                              {

                                     return x+y

                              }; 

           捕获是能修改变量值的,只能使用。

 (3)用引用的方式来捕获,引用类似于C的指针,进行地址访问

    auto add = [&]()->int

                              {

                                     return x+y

                              }; 

            1)&表示捕获外部作用域中的所有变量

            2)使用&之后,可以对捕获内容的值进行修改

                          x = 15;         //修改 x 的数值


补充内容:

1、内联函数:

(1)什么是内联函数

在C++中,内联函数是一种特殊的函数,它在被调用的地方会被直接展开,而不是像普通函数那样进行函数调用。内联函数的目的是减少函数调用的开销,因为在调用内联函数时,不需要进行函数调用的参数传递、栈帧的创建和销毁等操作,直接将函数的代码插入到调用的地方,从而提高程序的执行效率。

 (2)内联函数的格式

          inline   int   add()

                  {

                  }

(3)内联函数和匿名函数的区别

C++中的内联函数是在函数定义前加上inline关键字的函数,编译器会尝试将函数调用处直接替换为函数体,以减少函数调用的开销。内联函数通常适用于简单的、频繁调用的函数。

而匿名函数是指没有函数名的函数,通常通过lambda表达式来创建。匿名函数可以在需要时直接定义并使用,不需要专门定义函数名。匿名函数通常用于函数对象、回调函数等场景。

因此,内联函数和匿名函数的区别在于内联函数是有函数名的,用于优化函数调用开销;而匿名函数没有函数名,通常用于简单的、临时的函数定义。

  • 14
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值