首页 > 其他分享 >Lambda 表达式

Lambda 表达式

时间:2024-10-24 23:19:25浏览次数:8  
标签:10 return int auto 捕获 add 表达式 Lambda

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

[capture clause](parameters) -> return_type {
 // 函数体
// 可以使用捕获列表中的变量
return expression; // 可选的返回语句
}
  • 捕获列表(Capture clause):用于捕获外部变量,在 Lambda 表达式中可以访问这些变量。捕获列表可以为空,也可以包含变量列表 [var1, var2, ...]。
  • 参数列表(Parameters):与普通函数的参数列表类似,可以为空或包含参数列表param2, ...)。
  • 返回类型(Return type):Lambda 表达式可以自动推断返回类型auto,也可以显式指定返回类型 > return_type。如果函数体只有一条返回语句,可以省略返回类型。
  • 函数体(Body):Lambda 表达式的函数体,包含需要执行的代码。
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [](int a,int b)->int{
        return a+b;
    };
    int c=add(x,y);
    cout<< c;
    return 0;

}
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto max = [](int a,int b)->auto{
        return a  > b;
    };
    cout << max;
    return 0;

}

lambda调用错误写法:

int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [x,y]()->int{
        return x+y;
    };
    cout << add;
    return 0;

}

正确写法: 

int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [x,y]()->int{
        return x+y;
    };
    cout << add();
    return 0;

}

 这种方式捕获变量是不能修改变量的,只可读

int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [x,y]()->int{
        //x++;
        //x = 15;//这种方式捕获变量是不能修改变量的,只可读
        return x+y;
    };
    int ret = add();
    cout << ret;
    return 0;

}
捕获形式含义
[  ]空捕获(全局和局部静态仍然可见)
[=]隐式值捕获,值捕获lambda前面的变量
[names]一个逗号分隔的捕获变量列表
[&]隐式引用捕获
[&,a]除了a外的所有外部变量都为引用
[&x,y]按引用捕获x,按值捕获y
int main(int argc, char *argv[])
{
    static int x=10,y=200;
    auto add = []()->int{
        return x+y;
    };
    int a=10;
    int ret = add();
    cout << ret;
    return 0;

}
int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [&,y]()->int{
        x++;
        return x+y;
    };
    int a=10;
    int ret = add();
    cout << ret;
    return 0;

}

int main(int argc, char *argv[])
{
    int x=10,y=200;
    auto add = [&x,y]()->int{// 按引用捕获x,按值捕获y
        x++;
        return x+y;
    };
    int a=10;
    int ret = add();
    cout << ret;
    return 0;

}

标签:10,return,int,auto,捕获,add,表达式,Lambda
From: https://blog.csdn.net/m0_62407354/article/details/142812504

相关文章

  • 22. 正则表达式
    一、概述  正则表达式(regularexpression)又称规则表达式,是一种文本模式(pattern)。正则表达式使用一个字符串来描述、匹配具有相同规格的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本。正则表达式的核心功能就是处理文本。正则表达式并不仅限于某一种语言,但是在每种语......
  • C++11新特性:lambda表达式
    lambda表达式目录lambda表达式常见lambda表达式的省略式值的捕获lambda表达式的类型使用场景简述附:lambda的常量性......
  • 第10章-Python正则表达式
    在日常生活中,经常会遇到访问一个新的网站时,只有注册成网站用户才能够登录使用。一个用户在填写注册信息时,通常会要求填写手机号、邮箱等信息,在填写信息的过程中网站会对填写的手机号、邮箱进行验证。那么这个验证的过程是如何实现的呢?其实原理很简单,就是使用正则表达式进行......
  • [CSP-J2020] 表达式 题解
    短路这道题目中所含的运算符只有3个:与、或、非.在与运算和或运算中有2个性质.进行与运算时,若其中有一个值为0,则这个运算的结果就为0,即无需判断另1个数是否是0或1.进行或运算时,若其中有一个值为1,则这个运算的结果就为1,也无需判断另一个数是否是0或1.表达式树根据短路的性......
  • Java 泛型 Lambda 表达式
    介绍泛型是程序设计的一种特性,它允许强类型程序语言设计代码定义一些可以变的部分,编程中用泛型来代替某个实际的类型,而后通过实际调用传入的类型对泛型进行替换,达到代码复用的目的,有些像函数传参**使用泛型,操作的数据类型被指定为一个参数,这种参数在类接口和......
  • P8815 [CSP-J 2022] 逻辑表达式 题解
    短路我们可以使用一个变量来记录当前有没有短路.设变量短路为$dl$.当$dl$为$0$时,说明当前值为$0$,且运算符为&.当$dl$为$1$时,说明当前值为$1$,且运算符为|.代码重点讲完了,细节可以看代码以及注释.#include<iostream>#include<cstdio>#include<cstring>using......
  • Lambda 架构 vs Kappa 架构区别
    酒店lambda架构、kappa架构  Lambda架构面临的挑战是,您需要为实时层和批处理层复制预处理和其他常见工作,因此建议对这两种提取使用相同的服务,例如Spark,它有助于完成这两种操作。Kappa架构的引入是为了采用统一的方法来应对这一挑战,并且只有一个流层,使用ApacheKa......
  • 时间格式化-正则表达式
    //封装工具函数:格式化时间functionformatTime(timestamp,fmtString){//1.将时间戳转成dateconstdate=newDate(timestamp)////获取具体时间////获取年//constyear=date.getFullYear()////获取月份......
  • 正则表达式
    什么是正则表达式?◼我们先来看一下维基百科对正则表达式的解释:正则表达式(英语:RegularExpression,常简写为regex、regexp或RE),又称正则表示式、正则表示法、规则表达式、常规表示法,是计算机科学的一个概念;正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符......
  • PowerShell的Runspace是一个用于执行PowerShell代码的环境。它提供了一个独立的上下文
    PowerShell的Runspace是一个用于执行PowerShell代码的环境。它提供了一个独立的上下文,允许你在其中运行命令、脚本和表达式。Runspace可以被认为是PowerShell会话的一个实例,可以在多线程环境中使用,允许你并发执行多个PowerShell任务。以下是关于PowerShellRunspace的一些关键点和......