【C++】C++之Lambda表达式
2021-03-12 06:28
标签:需要 默认 示例 name oid 常见 https stl return 作者:李春港 由于前段时间在阅读一些C++源码的时候发现了Lambda表达式,所以在此也记录下Lambda表达式的使用。 很早之前Lambda在很多高级语言中,就已经被广泛地使用了,在一个程序中Lambda表达式可以理解为是匿名函数。在C++中,到了C++11标准才引入了这个Lambda表达式,这是C++11最重要而且也是最常用的特性之一。 使用Lambda表达式,不需要额外地定义函数名,可以更直接编写程序,有比较好的可读性和可维护性;不需要另外声明和定义函数体,避免了程序代码的膨胀。 说明: 注意: 可以看到这种情况使用Lambda表达式可以使代码更加直观、简介,无需再定义 cmp(int a, int b) 函数。 当没有标明返回类型的时候,系统会根据return回来的值来判断返回值的类型,auto会自动检索返回值的类型。 在类中使用: 总结: 【C++】C++之Lambda表达式 标签:需要 默认 示例 name oid 常见 https stl return 原文地址:https://www.cnblogs.com/lcgbk/p/14088462.html
出处:https://www.cnblogs.com/lcgbk/p/14088462.html
一、前言
二、Lambda表达式格式说明
2.1 完整的Lambda表达式格式
[capture list] (params list) mutable exception-> return type { function body }
名称
解析
[capture list]
捕获列表:lambda 表达式可以通过捕获列表捕获一定范围内的变量。
(params list)
形参列表,用于传参(可以省略)。
mutable
用来说明是否可以修改按值捕获的变量(可以省略),如果需要修改按值捕获的变量,则需要添加。
exception
异常设定(可以省略)。
return type
返回类型 (可省略,如果省略则自动从函数体中判断返回类型,return后的值。如果没有则返回void)。
function body
函数体,即逻辑代码。
2.2 常见的Lambda表达式格式
编号
格式
特性
格式1
[capture list] (params list) -> return type {function body}
1、无法修改捕获列表中的变量值。
格式2
[capture list] (params list) {function body}
1、无法修改捕获列表中的变量值;2、返回类型由return返回的值类型确定,如果没有return语句,则返回类型为void。
格式3
[capture list] {function body}
1、无法修改捕获列表中的变量值;2、返回类型由return返回的值类型确定,如果没有return语句,则返回类型为void;3、不能传入参数,类似普通的无参函数。
2.3 lambda 表达式捕获列表
捕获形式
解析
[ ]
不捕获任何变量。
[&]
捕获外部作用域中所有变量,并作为引用在函数体中使用(按引用捕获)。
[=]
捕获外部作用域中所有变量,并作为副本在函数体中使用(按值捕获)。
[=,&x]
按值捕获外部作用域中所有变量,并按引用捕获 x 变量。
[x]
按值捕获 x 变量,同时不捕获其他变量。
[this]
捕获当前类中的 this 指针,让 lambda 表达式拥有和当前类成员函数同样的访问权限。如果已经使用了 & 或者 =,就默认添加此选项。
三、示例
3.1 STL的sort函数参数使用Lambda
/*****************************************************************************
** Copyright ? 2020 lcg. All rights reserved.
** File name: Lambda.cpp
** Description: 在STL的sort函数参数使用Lambda表达式
** Author: lcg
** Version: 1.0
** Date: 2020.12.04
*****************************************************************************/
#include
3.2 有返回值的Lambda表达式
/** 1、标明返回类型**/
auto f = [](int a) -> int { return a + 1; };
std::cout
3.3 无参数Lambda表达式
auto f = []() { return 1; };
std::cout
3.4 捕获外部变量的Lambda表达式
/*****************************************************************************
** Copyright ? 2020 lcg. All rights reserved.
** File name: Lambda.cpp
** Description: 捕获外部变量的Lambda表达式
** Author: lcg
** Version: 1.0
** Date: 2020.12.04
*****************************************************************************/
#include
上一篇:GG:整数奇偶排序