广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中的Lambda函数详解
  • 135
分享到

C++中的Lambda函数详解

2024-04-02 19:04:59 135人浏览 安东尼
摘要

目录一 函数语法二 函数应用1、在普通函数中使用2、在Qt信号槽中使用3、在std::sort排序函数中的使用三 总结一 函数语法 我们平时调用函数的时候,都是需要被调用函数的函数名

一 函数语法

我们平时调用函数的时候,都是需要被调用函数的函数名,但是匿名函数就不需要函数名,而且直接写在需要调用的地方,对于以前没用过的小伙伴来说,第一眼看见了这语法可能很迷惑。

c++11的基本语法格式为:


[capture](parameters) -> return_type {  }

(1) [capture] :[]内为外部变量的传递方式,值、引用等,如下


[]        //表示的是在lambda定义之前的域,对外部参数的调用;
[=]       //表示外部参数直接传值
[&]       //表示外部参数传引用,可修改值。当默认捕获符是 & 时,后继的简单捕获符必须不以 & 开始。而当默认捕获符是 = 时,后继的简单捕获符必须以 & 开始。
[x, &y]   //x is captured by value, y is captured by reference
[&, x]    //x is explicitly captured by value. Other variables will be captured by reference
[=, &z]   //z is explicitly captured by reference. Other variables will be captured by value

(2)(parameters) :()内为形参,和普通函数的形参一样。
(3)-> return_type:->后面为lambda函数的返回类型,如 -> int-> string等。一般情况下,编译器推出lambda函数的返回值,所以这部分可以省略不写。
(4){ }:{}内为函数主体,和普通函数一样。

二 函数应用

1、在普通函数中使用

首先是定义,执行下面这句,不会运行函数 !!!


    std::function<int(int,int)> add = [](int a,int b) ->int {  return a + b;   };

上面代码,你知道lambda函数返回类型为int类型,但是函数左边不能直接赋值给int变量(编译器会报错),因为此处为lambda函数的定义,所以左边为函数指针类型变量,一般懒得写函数指针类型,就直接赋值给auto类型变量,如下。


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

下面才是函数的使用、运行!!!
如何运行lambda函数并获取函数返回值?执行函数需要看下面代码:


    auto add = [](int a,int b) ->int {  return a + b;   };
    int result  = add(1,2);

又或者如下:


auto add = [](int a,int b) ->int {  return a + b;   };
int(*func_ptr)(int,int) = add ;
int result = func_ptr(1,2);

2、在qt信号槽中使用

我觉得labmda函数非常适合在信号槽中使用。
(1)返回的函数指针可以直接用在connect函数中,刚好契合。
(2)该槽函数可能比较简单,只有这个地方使用,可以省去槽函数声明,使代码看上去更加简便,且业务代码更加集中。
基本使用


    connect(sys, &SYSClass::sig_1, this, [=](int index)
    {
        ......
    });

绑定信号槽的时候定义lambda函数,当收到信号的时候才执行槽函数,即lambda函数。
使用示范
在mTime时间后执行动画,动画执行后delete对象,非常适合弹窗关闭时,窗口关闭的动画操作。(widgetPtr为弹窗的指针)


    QTimer::singleShot(mTime,widgetPtr,[=]()
    {
        QPropertyAnimation *pAnimation = new QPropertyAnimation(widgetPtr,"windowOpacity",widgetPtr);
        pAnimation->setDuration(1000);
        pAnimation->setEasinGCurve(QEasingCurve::InCirc);
        pAnimation->setStartValue(1.0);
        pAnimation->setEndValue(0.0);
        pAnimation->start();
        connect(pAnimation,&QPropertyAnimation::finished,[=]{
            delete widgetPtr;
        });
    });

3、在std::sort排序函数中的使用

在标准库的排序函数使用中,可以使用函数回调的方式自定义排序的比较规则。
(1)sort函数提供排序算法

(2)floatList为容器变量,提供数据结构和数据;

(3)他们两个之间使用迭代器连接。

理解如下图:


而我们sort函数可以使用第三个参数(函数回调方式)作为比较依据进行排序,该参数就可以写成lambda函数,这样比较方法写在排序函数这里,可以使得代码更加直白、简便、集中。参考代码如下:


std::sort( floatList, floatList + N, [](float a, float b) 
		{
            return a < b;
        });

上面lambda函数,是sort函数中的迭代器每次运行做排序比较的时候就调用。
注意:
(1)lambda函数参数为( float , float ),类型必须与容器的元素类型一致。
(2)运行时,迭代器自动帮你把参数传入回调函数。
(3)回调函数返回值固定为bool,这里可以不写,由编译器自动确定。

三 总结

lambda函数定义后返回的是函数指针类型,即如:std::function<int(int,int)>,所以一般很少使用,我们在很多代码中也很少看到。
正常情况下,lambda函数相对普通函数的定义和使用其实没什么优势。但是某些使用到函数指针的场合下,我们就可以酌情考虑使用,特别是函数指针作为函数参数的时候,比如qt的信号槽、回调函数等,使用起来即方便,又显得代码高大上,简直就完美O(∩_∩)O。

到此这篇关于C++中的Lambda函数详解的文章就介绍到这了,更多相关C++ Lambda函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C++中的Lambda函数详解

本文链接: https://www.lsjlt.com/news/160794.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中的Lambda函数详解
    目录一 函数语法二 函数应用1、在普通函数中使用2、在qt信号槽中使用3、在std::sort排序函数中的使用三 总结一 函数语法 我们平时调用函数的时候,都是需要被调用函数的函数名...
    99+
    2022-11-12
  • C++lambda函数详解
    目录Lambda 表达式基础1. 值捕获2. 引用捕获3. 隐式捕获4. 表达式捕获泛型 Lambda函数对象包装器Lambda 表达式 Lambda 表达式是现代 C++ 中最重要...
    99+
    2023-02-13
    C++ lambda表达式 C++ lambda函数
  • C++匿名函数lambda详解
    匿名函数lambda 一、匿名函数的基本语法二、捕获列表2.1、值捕获2.2、引用捕获2.3、隐式捕获2.4、空捕获列表2.5、表达式捕获2.6、泛型 Lambda2.7、可变lambda2....
    99+
    2023-10-23
    c++ linux 开发语言 服务器 算法
  • 一文详解C++11中的lambda函数
    目录1.lambda函数语法1.1 捕获列表1.2 mutable修饰符1.3 匿名lambda函数2.lambda与STL我可以明确告诉你:lambda函数是C++11中最重要的,...
    99+
    2023-02-07
    C++11 lambda函数使用 C++11 lambda函数 C++11 lambda
  • C++11中匿名函数lambda的使用详解
    目录一、lambda基础介绍二、lambda使用例子2.1 STL算法中的回调函数2.2 回调函数2.3 多线程编程三、总结官方介绍: C++ lambda是C++11新增的一种匿名...
    99+
    2023-05-18
    C++11匿名函数lambda使用 C++11匿名函数lambda C++11匿名函数
  • python中lambda匿名函数详解
    在Python中,不通过def来声明函数名字,而是通过lambda关键字来定义的函数称为匿名函数 关键字lambda表示匿名函数 语法 lambda 参数:表达式 先写lambda关...
    99+
    2022-11-13
  • python3中apply函数和lambda函数的使用详解
    目录lambda函数lambda是什么lambda用法详解lambda + maplambda + filterlambda + reduce避免过度使用lamb...
    99+
    2022-11-13
  • 详解Python的lambda函数用法
    lambda函数用法 lambda非常重要的一个定义。lambda在【运行时】才绑定,【不是】在定义的时候绑定。下面这个列子: 本意想:让X分别与0到1的数相加。x+0,x+1,x+2,x+3 实际运行结果是: 0...
    99+
    2022-06-02
    lambda函数用法 Python lambda Python函数
  • C#中的匿名函数、lambda表达式解读
    目录C# 匿名函数、lambda表达式、Linq查询一、匿名函数的使用二、lambda表达式总结C# 匿名函数、lambda表达式、Linq查询 一、匿名函数的使用 匿名函数是一个&...
    99+
    2023-01-28
    C#匿名函数 C# lambda表达式 C# lambda
  • 详解Python的Lambda函数与排序
    lambda函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以用在任何需要函数的地方。下面的例子比较了传统的函数与lambda函数的定义方式。 前几天看到了一行求1000的阶乘的Python...
    99+
    2022-06-04
    详解 函数 Python
  • 详解C++中的isunordered函数
    所述isunordered()函数定义在<cmath.h>并检查是否第一个参数的值可以有意义与第二个参数进行比较。如果第一个参数不能与第二个参数进行有意义的比较(即一个或...
    99+
    2022-11-11
  • python函数和python匿名函数lambda详解
    目录1. python函数1.1 函数的作用1.2 函数定义1.3 函数调用1.4 函数的参数1.4.1 参数的传递1.4.2 参数类型1.4.2.1 位置参数(必备参数)1.4.2...
    99+
    2022-11-11
  • C++中的众数函数详解
    C++中的众数函数详解在统计学中,众数指的是一组数据中出现次数最多的数值。在C++语言中,我们可以通过编写一个众数函数来找到任意一组数据中的众数。众数函数的实现可以采用多种不同的方法,下面将详细介绍其中两种常用的方法。第一种方法是使用哈希表...
    99+
    2023-11-18
    C++ 详解 众数函数
  • C++中的Lambda函数怎么使用
    这篇文章主要讲解了“C++中的Lambda函数怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++中的Lambda函数怎么使用”吧!一 函数语法我们平时调用函数的时候,都是需要被调用...
    99+
    2023-06-22
  • C++中的随机数函数详解
    C++中的随机数函数详解随机数在计算机编程中起着重要的作用,它可以用于模拟随机事件、生成随机数序列等多种应用。C++语言中提供了一系列的随机数函数,方便开发人员进行随机数的生成和应用。本文将详细介绍C++中的随机数函数的使用方法和注意事项。...
    99+
    2023-11-18
    随机数生成器(Random Number Generator) 伪随机数(Pseudorandom Number) 随机
  • C++中的乘法函数详解
    C++中的乘法函数详解在C++编程中,乘法是一项常见而重要的操作。C++提供了多种方式来实现乘法运算,包括基本的乘法运算符、函数重载和模板等。本文将详细介绍C++中的乘法函数的使用方法和注意事项。乘法运算符C++中的乘法运算符是*,用于对两...
    99+
    2023-11-18
    C++ 详解 乘法函数
  • C++中的三角函数详解
    C++中的三角函数详解三角函数是数学中的基本函数之一,在计算机编程中也有广泛应用。C++作为一种强大的编程语言,提供了一系列用于计算三角函数的函数和库。本文将详细介绍C++中的三角函数,包括sin、cos、tan、asin、acos、ata...
    99+
    2023-11-18
    C++ 详解 三角函数
  • C++中的排序函数详解
    C++ 中的排序函数是用于对数组或容器中的元素进行排序的功能函数。排序可以按升序或降序排列,可以对整型、浮点型、字符型等各种类型的数据进行排序。C++ 语言提供了多个排序函数,本文将对这些排序函数的使用方法和特点进行详细介绍。sort()函...
    99+
    2023-11-18
    C++ 详解 排序函数
  • C++中的方差函数详解
    C++中的方差函数详解方差(variance)是统计学中常用的一个概念,用来衡量一组数据的离散程度,即数据与其均值之间的差异程度。在C++中,我们可以使用方差函数来计算一组数据的方差。C++提供了多种计算方差的方法,其中最常见的是使用模板函...
    99+
    2023-11-18
    C++ 函数解析 方差计算
  • C++中的构造函数详解
    目录普通变量的初始化构造函数一定会生成默认构造函数吗?防止隐式类型转换赋值与初始化的区别对象的计数成员初始化的顺序类的引用成员构造函数使用注意事项参考总结普通变量的初始化 当我们在定...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作