广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++Lambda表达式详解
  • 219
分享到

C++Lambda表达式详解

2024-04-02 19:04:59 219人浏览 独家记忆
摘要

目录概述语法分析捕获列表关键字声明示例捕获列表按值传递总结概述 c++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:

概述

c++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下:


[捕获列表] (参数) mutable 或 exception 声明 -> 返回值类型 {函数体}
//计算两个值的和
auto func = [](int a, int b) -> int{return a+b;};
//当返回值的类型是确定时,可以忽略返回值
auto func = [](int a, int b){return a + b;};
//调用
int sum = func(1, 3);

语法分析

捕获列表

Lambda 表达式相当于一个类,那么捕获列表就是传递给这个类的类成员。比如:


class Labmda
{
public:
    const int test;
    Labmda(int value):test(value)
    {
    }
public:
    int run(int a, int b)
    {
        return a + b + test;
    }
}
int main()
{
    int test = 10;
    auto func = Labmda(test);
    int sum = func.run(1, 3);
}
//使用Lambda 表达式的写法
int main()
{
    int test = 10;
    auto func = [test](int a, int b){return a + b + test;};
    int sum = func(1, 3);
}

捕获列表有以下格式:

格式 描述
[] 不带任何参数
[=] Lambda表达式之前的局部变量,包括所在类的this,变量按值方式传递
[&] Lambda表达式之前的局部变量,包括所在类的this,变量按引用方式传递
[this] Lambda表达式所在类的this
[a] Lambda表达式之前的局部变量a的值,也可以传入多个值,如[a , b]
[&a] Lambda表达式之前的局部变量a的引用

关键字声明

关键字声明一般都很少用到,也不建议随便使用,可以忽略不计。

mutable

当捕获列表以值的方式传递时有效,加上此关键字后,可以修改Lambda类成员(带const修饰符)。比如:


int test = 10;
//编译报错,test成员不能修改
auto func = [test](int a, int b){test = 8; return a + b + test;}; 
//编译正常
auto func = [test](int a, int b)mutable {test = 8; return a + b + test;}; 

这里需要注意的是:Lambda类成员test修改之后,并不会改变外部int test的值。

exception

exception 声明用于指定函数抛出的异常,如抛出整数类型的异常,可以使用 throw(int)

示例

捕获列表按值传递


int test = 10;
auto func = [=](int a, int b){return a + b + test;};
auto func2 = [test](int a, int b){return a + b + test;};
int sum = func(1, 3); //sum等于14

这里需要注意的是func表达式中test的值只更新到表达式之前:


int test = 10;
auto func = [=](int a, int b){return a + b + test;};
test = 5;
int sum = func(1, 3); //sum还是等于14

捕获列表按引用传递


int test = 10;
auto func = [&](int a, int b){test = 5; return a + b + test;};
auto func2 = [&test](int a, int b){test = 5; return a + b + test;};
int sum = func(1, 3); //sum等于9,test等于5

这里func表达式中test的值就能随时更新:


int test = 10;
auto func = [&](int a, int b){return a + b + test;};
test = 5;
int sum = func(1, 3); //sum等于9,test等于5

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: C++Lambda表达式详解

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

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

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

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

下载Word文档
猜你喜欢
  • C++Lambda表达式详解
    目录概述语法分析捕获列表关键字声明示例捕获列表按值传递总结概述 C++ 11 中的 Lambda 表达式用于定义并创建匿名的函数对象,以简化编程工作。Lambda 的语法形式如下: ...
    99+
    2022-11-12
  • C#3.0中Lambda表达式详解
    在C#2.0中,微软给我们带来了一些新的特性,例如泛型,匿名委托等。然而,这些新的特性多多少少会给人一种从别的语言中“抄”来的感觉(例如泛型类似C++的模板,一些特性类似Java中的...
    99+
    2022-11-15
    C# Lambda
  • Lambda表达式详解
    Lambda表达式 1. 为什么使用lambda表达式2. 入门案例3. lambda表达式组成4. lambda表达式使用4.1 语法格式一4.2 语法格式二4.3 语法格式三4.4 语法格...
    99+
    2023-09-01
    java jvm 算法
  • python3 lambda表达式详解
    技术背景 lambda表达式本身是一个非常基础的python函数语法,其基本功能跟使用def所定义的python函数是一样的,只是lambda表达式基本在一行以内就完整的表达了整个函数的运算逻辑。这里我们简单展示一些...
    99+
    2022-06-02
    python的lambda函数 python中lambda的用法 python lambda函数怎么用
  • java lambda表达式详解
    一、Lambda初识 我们知道,在Java中,接口是不能实例化的,但是接口对象可以指向它的实现类对象。如果接口连实现对象都没有呢?那还可以使用匿名类的方式,如下: public class JavaTest { public ...
    99+
    2023-09-15
    java servlet jvm
  • C++实例详解lambda表达式的使用
    目录lambda表达式1、lambda表达式语法2、lambda应用3、lambda表达式的应用实践1、计算器案例2、智能指针案例3、优先级队列lambda表达式 C++11 函数对...
    99+
    2022-11-13
  • C# 内部类与Lambda表达式用法详解
    目录一、内部类1.什么是内部类?1.类作为形参和返回值:2.内部类的几种形式二、Lambda表达式(强调做什么,而不是以什么形式去做)1.Lambda表达式的格式要求:2.Lambd...
    99+
    2022-11-12
  • C++学习之Lambda表达式的用法详解
    目录简介捕获原理Lambda回调简介 Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中...
    99+
    2022-11-13
  • Java 8的Lambda表达式详解
    本篇内容介绍了“Java 8的Lambda表达式详解”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!功能接口只包含一个方法的接口被称为功能接口...
    99+
    2023-06-17
  • C++中的Lambda表达式及表达式语句
    目录一、概念二、左值与右值三、类型转换四、操作符五、思考1、思考下面x变量是左值还是右值,有什么特性?2、思考一下以下赋值操作符的原始代码是怎样的?3、思考以下代码做了什么事情?一、...
    99+
    2022-11-12
  • C++详细分析lambda表达式的本质
    例: stable_sort(words.begin(), words.end(), [](const string& s1, const string& s2...
    99+
    2022-11-13
  • 详细解读Java的Lambda表达式
    目录Lambda 表达式Lambada 简介简单的示例Lambda 表达式的组成部分函数式接口介绍几个 Java 中重要的函数接口Lambda 表达式 最早接触到 Lambda 表达...
    99+
    2023-05-14
    Java Lambda表达式 Lambda表达式
  • Java8新特性-Lambda表达式详解
    目录一、简介 特征引入Lambda表达式的总结三、Lambda表达式的使用无参、无返回值有参无返回值无参数有返回值有参数有返回值四、Lambda表达式的注意事项 ...
    99+
    2023-05-16
    java8新特性 lambda表达式 java8 lambda表达式
  • C# Lambda表达式怎么用
    这篇文章主要为大家展示了“C# Lambda表达式怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“C# Lambda表达式怎么用”这篇文章吧。C#语言还是比较常见的东西,这里我们主要介绍C#...
    99+
    2023-06-17
  • python中的lambda表达式用法详解
    本文实例讲述了python中的lambda表达式用法。分享给大家供大家参考,具体如下: 这里来为大家介绍一下lambda函数。 lambda 函数是一种快速定义单行的最小函数,是从 Lisp 借用来的,可以...
    99+
    2022-06-04
    表达式 详解 python
  • Java中Lambda表达式的使用详解
    目录理解函数式接口以及 Lambda表达式的发展过程Lambda表达式及语法一起来看看具体的使用你需要注意什么Lambda的实际运用1.对集合排序2.遍历集合3.遍历集合(带条件)4...
    99+
    2022-11-12
  • Java中Lambda表达式使用及详解
    Java中Lambda表达式使用及详解 前言 一、Lambda表达式的简介 Lambda表达式(闭包):java8的新特性,lambda运行将函数作为一个方法的参数,也就是函数作为参数传递到方法中。使用lambda表达式可以让代码更加...
    99+
    2023-08-16
    java
  • C#中Lambda表达式的用法
    从C#3.0开始,可以使用lambda表达式把实现代码赋予委托。lambda表达式与委托(https://www.jb51.net/article/244051.htm)直接相关。当...
    99+
    2022-11-13
  • C++lambda表达式使用介绍
    目录前言lambda表达式格式一些语法走进底层前言 C++98中的一个例子。 #include <iostream> #include <vector> #i...
    99+
    2022-11-13
  • 详解Java函数式编程和lambda表达式
    目录为什么要使用函数式编程JDK8接口新特性函数接口方法引用类型推断变量引用级联表达式和柯里化为什么要使用函数式编程 函数式编程更多时候是一种编程的思维方式,是种方法论。函数式与命令...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作