当前位置: 首页 > news >正文

C++11中Lambda新特性

1.定义
lambda匿名函数的语法格式:

[外部变量访问方式说明符](参数)mutablenoexcept/throw()->返回值类型
{函数体;
};

其中各部分的含义分别为:

a.[外部变量方位方式说明符]
[]方括号用于向编译器表明当前是一个lambda表达式,其不能被省略。在方括号内部,可以注明当前lambda函数的函数体中可以使用哪些“外部变量”。所谓外部变量,指的是和当前lambda表达式位于同一作用域内的所有局部变量。

b.(参数)
和普通函数的定义一样,lambda匿名函数也可以接收外部传递的多个参数。和普通函数不同的是,如果不需要传递参数,可以连同()小括号一起省略

c.mutable
此关键字可以省略,如果使用则之前的()小括号将不能省略(参数个数可以为0)。默认情况下,对于以值传递方式引入的外部变量,不允许在lambda表达式内部修改它们的值(可以理解为这部分变量都是const常量)。而如果想修改它们,就必须使用mutable关键字。注意:对于以传递方式引入的外部变量,lambda表达式修改的是拷贝的那一份,并不会修改真正的外部变量

d.noexcept/throw()
可以省略如果使用,在之前的()小括号将不能省略(参数个数可以为0)默认情况下,lambda函数的函数体中可以抛出任何类型的异常。而标注noexcept关键字,则表示函数体内不会抛出任何异常;使用throw()可以指定lambda函数内部可以抛出的异常类型

e.->返回值类型
指明lambda匿名函数的返回值类型。
如果lambda函数体内只有一个return语句,或者该函数返回void,则编译器可以自行推断出返回值类型,此情况下可以直接省略"->返回值类型"。

f.函数体和普通函数一样,lambda匿名函数包含的内部代码都放置在函数体中。该函数体内除了可以使用指定传递进来的参数之外,还可以使用指定的外部变量以及全局范围内的所有全局变量。

2.eg:
在这里插入图片描述

#include<iostream>
#include<algorithm>
using namespace std;
int main()
{int num[4]= {4,2,3,1};
//对a数组中的元素进行排序sort(num,num+4,[=](int x,int y)->bool{return x<y;});for(int n:num) {cout<<n<<"";//1234}return 0;
}
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int x,int y) {return x<y;
}
int main()
{int num[4]= {4,2,3,1};
//对a数组中的元素进行排序sort(num,num+4,cmp);for(auto n:num) {cout<<n<<"";//1234}return 0;
}
http://www.lryc.cn/news/39771.html

相关文章:

  • 【jvm系列-01】初识虚拟机与java虚拟机
  • 「Python 基础」数据库应用编程
  • 一个nginx的小项目,不写代码,实现在局域网内访问其他电脑的网页
  • 23.3.14打卡 2022年江西省大学生程序设计竞赛(正式赛)ABL
  • 用idea操作hbase数据库,并映射到hive
  • 手机解锁方法:8个顶级的 Android 手机解锁软件
  • JVS快速开发平台2.1.7版本,列表页配置新增特性介绍
  • 【华为机试真题详解 Python实现】去除多余空格【2023 Q1 | 100分】
  • 【SpringBoot项目实战+思维导图】瑞吉外卖⑤(新增套餐、套餐分页查询、删除套餐、短信发送、手机验证码登录)
  • OpenAI 发布GPT-4——全网抢先体验
  • C++——多态
  • javaSE系列之类与对象
  • 远程构建(命令、脚本构建)jenkins
  • 2023-03-15 ElasticSearch
  • 指针和数组笔试题解析【下篇】
  • DHCP原理简析及交互实践
  • 用二极管、三极管和MOS管搭建逻辑门电路
  • SpringBoot:手写一个 SpringBoot Starter
  • 【23】Verilog进阶 - 数位转换【实时处理 + 标志信号】
  • 常见的HTTP状态码
  • D. Peculiar Movie Preferences(思维 + 一个坑)
  • 真1分钟搞懂缓存穿透、缓存击穿、缓存雪崩
  • 蓝桥刷题总结1
  • 淘宝商品详情数据接口 关键字搜索接口 请求代码分享
  • 【数据结构】链表OJ(二)
  • Linux系统搭建FTP服务器
  • MySQL数据同步到 Redis 缓存的几种方法
  • 2023年网络安全比赛--CMS网站渗透中职组(超详细)
  • 【蓝桥杯集训·每日一题】AcWing 4309. 消灭老鼠
  • FPGA实现CSI-2 解码MIPI视频 2line 720P分辨率 OV5647采集 提供工程源码和技术支持