初识lamdba表达式(C++11)

2024-02-15 01:50
文章标签 c++ 初识 表达式 lamdba

本文主要是介绍初识lamdba表达式(C++11),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在C++11中提出了lamba表达式,那么其究竟有什么用和怎么用,下面就来看一下:

lamba表达式根据其用途来说,其终归相当于一个匿名函数,直接在定义处调用,相当于inline函数,但没有函数名,参数、返回值、函数体有lamba其自己的规则来表示;其最方便之处就是省去了函数命名这一步,直接用来使用,很方便,人性化。

知道了lamba表达式的作用了,下面就来介绍以下怎么使用ta了:

lambda表达式书写格式:[capture-list] (parameters) mutable -> return-type { statement }

下面就来介绍一下lamba表达式使用语法:

1. capture-list:捕捉列表,可以拿到上下文中的变量供statement(函数体)使用,以下是ta的表现方式:

  • [  ]:表示没有使用任何函数对象的参数
  • [var]:表示以值传递的方式捕捉变量var
  • [=]:表示以值传递的方式捕捉父作用域中的变量(包括this)
  • [&var]:表示以引用传递的方式捕捉变量var
  • [&]:表示以引用传递的方式捕捉父作用域中的变量(包括this)
  • [this]:表示以值传递的方式捕捉this指针

注意:

  • 父作用域指的是使用lamba表达式的语句块(函数体)
  • 捕捉多个元素的时候使用逗号隔开,如[a,b,&c]
  • 捕捉列表不能重复(包含),例如:[a,=],用值传递捕捉了a,之后又以值捕捉了父作用域变量,相当于a拿到了2次,会导致编译器报错
  • lamba不能相互赋值,但可以拷贝构造
  • lamba只能捕捉当前函数体作用域的局部变量,否则编译会报错

                      

2. parameters:参数列表,和普通函数的参数列表使用规则一样,但不能使用默认参数,没有参数,可以连()一起省略

3.mutable:默认情况下,lambda函数是一个const函数,mutable可以取消其常量性。使用该修饰符时,参数列表不可省略(即使参数为空)

4.-> return-type:返回值类型,没有返回值时可以省略,返回值类型明确时,也可省略,由编译器对返回类型进行推导

5.statement:函数体,在函数体内,可以使用捕捉到的变量。

函数对象(仿函数)与lamba表达式:

class Money
{
public:Money(int money):_price(money){}double operator()(int num, double discount){return num * _price * discount;}private:int _price;
};
int main()
{//仿函数double price = 10;Money m(10);m(50, 0.9);//lemba表达式auto fun = [=](int num, double discount)->double {return price* discount*num; };fun(50,0.9);	//没有计算的lamdba表达式auto fun2 = []{cout<<"something"<<endl; };fun2;
}

 

 

 

 

这篇关于初识lamdba表达式(C++11)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/710159

相关文章

Java中的Lambda表达式及其应用小结

《Java中的Lambda表达式及其应用小结》Java中的Lambda表达式是一项极具创新性的特性,它使得Java代码更加简洁和高效,尤其是在集合操作和并行处理方面,:本文主要介绍Java中的La... 目录前言1. 什么是Lambda表达式?2. Lambda表达式的基本语法例子1:最简单的Lambda表

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

C++中初始化二维数组的几种常见方法

《C++中初始化二维数组的几种常见方法》本文详细介绍了在C++中初始化二维数组的不同方式,包括静态初始化、循环、全部为零、部分初始化、std::array和std::vector,以及std::vec... 目录1. 静态初始化2. 使用循环初始化3. 全部初始化为零4. 部分初始化5. 使用 std::a

C++ vector的常见用法超详细讲解

《C++vector的常见用法超详细讲解》:本文主要介绍C++vector的常见用法,包括C++中vector容器的定义、初始化方法、访问元素、常用函数及其时间复杂度,通过代码介绍的非常详细,... 目录1、vector的定义2、vector常用初始化方法1、使编程用花括号直接赋值2、使用圆括号赋值3、ve

如何高效移除C++关联容器中的元素

《如何高效移除C++关联容器中的元素》关联容器和顺序容器有着很大不同,关联容器中的元素是按照关键字来保存和访问的,而顺序容器中的元素是按它们在容器中的位置来顺序保存和访问的,本文介绍了如何高效移除C+... 目录一、简介二、移除给定位置的元素三、移除与特定键值等价的元素四、移除满足特android定条件的元

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

C++ Sort函数使用场景分析

《C++Sort函数使用场景分析》sort函数是algorithm库下的一个函数,sort函数是不稳定的,即大小相同的元素在排序后相对顺序可能发生改变,如果某些场景需要保持相同元素间的相对顺序,可使... 目录C++ Sort函数详解一、sort函数调用的两种方式二、sort函数使用场景三、sort函数排序

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++