c++中lambda表达式
2021/7/29 22:10:25
本文主要是介绍c++中lambda表达式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
lambda表达式概述
[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {
函数体
}
参数类型说明:
1.[函数对象参数]:捕捉列表。捕捉列表总是出现在Lambda函数的开始处,[]是Lambda引出符,必须存在,不可省略!
编译器根据该引出符判断接下来的代码是否是Lambda函数。捕捉列表能够捕捉上下文中的变量以供Lambda函数使用;
函数对象参数形式列表
- 空。没有任何函数对象参数。
- =。函数体内可以使用 Lambda 所在范围内所有可见的局部变量(包括 Lambda 所在类的 this),并且是值传递方式(相当于编译器自动为我们按值传递了所有局部变量)。
- &。函数体内可以使用 Lambda 所在范围内所有可见的局部变量(包括 Lambda 所在类的 this),并且是引用传递方式相当于是编译器自动为我们按引用传递了所有局部变量)。
- this。函数体内可以使用 Lambda 所在类中的成员变量。
- a。将 a 按值进行传递。按值进行传递时,函数体内不能修改传递进来的 a 的拷贝,因为默认情况下函数是 const 的,要修改传递进来的拷贝,可以添加 mutable 修饰符。
- &a。将 a 按引用进行传递。
- a,&b。将 a 按值传递,b 按引用进行传递。
- =,&a,&b。除 a 和 b 按引用进行传递外,其他参数都按值进行传递。
- &,a,b。除 a 和 b 按值进行传递外,其他参数都按引用进行传递
2.[操作符重载函数参数] : 标识重载的 () 操作符的参数,没有参数时,这部分可以省略,可以连同括号“()”一起省略。
参数可以通过按值(如: (a, b))和按引用 (如: (&a, &b)) 两种方式进行传递。
3.mutable 或 exception 声明 :mutable 可变变量,exception 异常
注:在使用该修饰符时,参数列表不可省略(即使参数为空);
4.[返回值类型] :返回类型,当不需要返回类型时(void),可以省略
5.[函数体] : 函数内容,可以使用上下文的数据。
实例
[&]() { int a = 1;}; // 无参无返回 [&](int a) { int b = a + 1;}; // 单参无返回 [&](int a,int b) { int c = a + b;}; // 双参无返回 [&]() -> int { return 1;}; // 无参返回 [&](int a) -> int { return a + 1;}; // 无参无返回
function函数
头文件 functional.h
用于声明函数
std::function<int(int,int)> mod = [](int i, int j){return i % j; };
这里std::function<int(int,int)>的作用就类似于int和auto。
这篇关于c++中lambda表达式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-23增量更新怎么做?-icode9专业技术文章分享
- 2024-11-23压缩包加密方案有哪些?-icode9专业技术文章分享
- 2024-11-23用shell怎么写一个开机时自动同步远程仓库的代码?-icode9专业技术文章分享
- 2024-11-23webman可以同步自己的仓库吗?-icode9专业技术文章分享
- 2024-11-23在 Webman 中怎么判断是否有某命令进程正在运行?-icode9专业技术文章分享
- 2024-11-23如何重置new Swiper?-icode9专业技术文章分享
- 2024-11-23oss直传有什么好处?-icode9专业技术文章分享
- 2024-11-23如何将oss直传封装成一个组件在其他页面调用时都可以使用?-icode9专业技术文章分享
- 2024-11-23怎么使用laravel 11在代码里获取路由列表?-icode9专业技术文章分享
- 2024-11-22怎么实现ansible playbook 备份代码中命名包含时间戳功能?-icode9专业技术文章分享