首页 > 其他分享 >Lambda函数

Lambda函数

时间:2024-09-24 10:54:30浏览次数:1  
标签:return 函数 int 捕获 Lambda 变量

C++ 中的 Lambda 函数

在C++11及以后版本中,Lambda函数(或称为匿名函数)是一种内联函数,可以在函数内部或任何其他地方定义,甚至可以立即传递给其他函数。
Lambda函数的语法更加灵活,允许捕获变量和处理复杂的行为,非常适合在需要简单函数的场景中使用。

语法

[capture](parameters) -> return_type {
    // 函数体
}
  • capture(捕获列表):指定 Lambda 函数可以捕获哪些变量。可以是[](不捕获任何变量)、[&](捕获所有变量通过引用)、[=](捕获所有变量通过值)等。
  • parameters(参数列表):与普通函数一样,定义传递给 Lambda 函数的参数。
  • return_type(返回类型):指定返回值的类型(可以省略,编译器会自动推断)。
  • 函数体:Lambda 函数的逻辑实现。

捕获列表的详细说明:

  • [ ]:不捕获任何外部变量。
  • [&]:通过引用捕获外部变量,可以修改它们的值。
  • [=]:通过值捕获外部变量,捕获的是它们的拷贝。
  • [&x, =y]:对x通过引用捕获,y通过值捕获。

使用示例

  1. 基本 Lambda 表达式:

    auto add = [](int x, int y) -> int {
        return x + y;
    };
    std::cout << add(3, 4) << std::endl;  // 输出 7
    

    在这个例子中,定义了一个 Lambda 函数add,它接受两个整数并返回它们的和。

  2. 捕获外部变量:

    int a = 5, b = 3;
    auto add = [a, b]() {
        return a + b;
    };
    std::cout << add() << std::endl;  // 输出 8
    

    在这个例子中,外部变量ab被捕获并通过值传递给 Lambda 函数。

  3. 通过引用捕获:

    int x = 10;
    auto modify = [&x]() {
        x += 5;
    };
    modify();
    std::cout << x << std::endl;  // 输出 15
    

    在这里,Lambda 函数通过引用捕获x,并在函数内部修改了它的值。

总结

  • Lambda 函数是 C++ 中用于创建匿名函数的特性,通常用于内联、简化代码。
  • 它的强大之处在于可以捕获外部变量,支持按值或引用捕获,以及自动推导返回类型。

标签:return,函数,int,捕获,Lambda,变量
From: https://www.cnblogs.com/niumachen/p/18428662

相关文章

  • C++学习笔记(三)-----【内联函数】
    1内联函数1.1为什么要有内联函数答:还是为了补C语言的坑,补宏的坑#defineN10//实现一个ADD的宏函数//错误写法#defineADD(intx,inty){returnx+y;}#defineADD(x,y){returnx+y;}#defineADD(x,y)returnx+y;#defineADD(x,y)x+y;//宏不需......
  • 凸函数的等价定义及其证明
    Preface    我非常记得罗翔老师说过一句话,"我们登上并非我们所选择的舞台,演绎并非我们所选择的剧本,但是没有谁的剧本值得羡慕,我们唯一能做的就是尽力演好自己的角色,打好自己手中的牌"。我们所作的每一个选择都可看做是一个优化问题中的一次迭代,在一次一次迭代过程中趋向我们......
  • vim跳转到函数开始([[)和转到声明(gd)的一些实现细节
    intro在vim的入门介绍中,明确说明了vim是一个"文本编辑器"(texteditor)而不是一个程序编辑器,和C/C++的预处理(preprocessor)一样,vim本身并不理解程序的结构。IntroductionintroVimstandsforViIMproved.ItusedtobeViIMi......
  • 【损失函数】KL散度与交叉熵理解
    变分自编码器等模型中会引入Kullback-Leibler散度作为损失函数 目录信息论KL散度实际模型交叉熵与MLE信息论谈及熵相关的概念,必须要涉及到信息论。信息论是一门运用概率论与数理统计的方法研究信息、信息熵、通信系统、数据传输、密码学、数据压缩等问题的应用......
  • 【解密 Kotlin 扩展函数】扩展函数的底层原理(十八)
    导读大纲1.1.1从Java调用扩展函数1.1.2扩展函数无法重载1.1.1从Java调用扩展函数在编译器底层下,扩展函数是一种静态方法,它接受接收器对象作为第一个参数调用它不涉及创建适配器对象或任何其他运行时开销这使得从Java使用扩展函数变得非常简单调用静态......
  • `std::optional` 函数返回值
    std::optional是C++17中引入的一个模板类,用于表示一个值可能存在也可能不存在的情况。它可以存储一个值,或者表示没有值的状态,类似于其他编程语言中的“可选”类型。std::optional主要特性:值的存在性:可以使用has_value()方法检查std::optional是否包含一个有效的值。访......
  • 欧拉函数φ
    欧拉函数欧拉函数,即\(\varphi(n)\),表示的是小于等于\(n\)和\(n\)互质的数的个数,详细定义看wiki。欧拉函数其实就是容斥原理的应用,举个例子:如\(n=6\),\(1,2,3,4,5,6\)是整个序列,我们将\(6\)的质因子\(2\),\(3\)取出,减去小于等于\(6\)的\(2\)的倍数和\(3\)的倍数,......
  • 用递归函数实现汉诺塔游戏
    1.是什么        汉诺塔(HanoiTower)是一个经典的递归问题,描述了将一个由三根柱子组成的塔上的n个大小不一的圆盘从一个柱子移动到另一个柱子上的过程。每次移动只能移动一个圆盘,并且大圆盘不能放在小圆盘上面。思路分析:        当圆盘总数是5时,要将最底层......
  • AWTK fscript 中的 value 扩展函数
    fscript是AWTK内置的脚本引擎,开发者可以在UIXML文件中直接嵌入fscript脚本,提高开发效率。本文介绍一下fscript中的**value扩展函数**value扩展函数value相关的辅助函数。1.value_is_valid判断value是否有效。原型value_is_valid(v)=>bool示例vara=object_c......
  • AWTK fscript 中的 CRC函数
    fscript是AWTK内置的脚本引擎,开发者可以在UIXML文件中直接嵌入fscript脚本,提高开发效率。本文介绍一下fscript中的**CRC函数**CRC函数Cyclicredundancycheck1.crc16crc16函数。原型crc16(str)=>uint16_tcrc16(data,size)=>uint16_tcrc16(binary)=>uint16......