C++ Lambda函数(匿名函数) 使用方法
来源:互联网 发布:codol 正义 数据 编辑:程序博客网 时间:2024/06/04 19:48
C++中的可调用对象大约有四种,分别是:函数、函数指针、重载了函数调用运算符的类、lambda表达式。其中lambda表达式就是今天本文的主题。
一个lambda表达式表示一个可调用的代码单元,可以理解为未命名的内联函数。一个lambda表达式具有返回类型、参数列表、函数体。
一般lambda表达式具有如下的形式:
[capture list] (parameter list) -> return type {function body}
其中:
capture list:捕获列表(lambda表达式所在的函数中定义的局部变量的列表)(通常为空) parameter list :参数列表 return type:返回类型 function body:函数体
需要注意的是:一般时候,使用lambda表达式可以忽略lambda的参数列表和返回类型(原因下面再说)。
例子1:
void func_1(){ int a=1; auto func_lambda_1=[] (const int i) {cout<<i<<" "<<endl;}; //创建一个lambda表达式 func_lambda_1(a); //调用func_lambda_1,传入参数a;}
例子2:
void_func_2(){ int a=1; auto func_lambda_2=[a] () {const<<a<<" "<<endl;}; //使用捕获列表,捕获函数func_2的局部变量a, a=10; func_lambda_2(); //调用func_lambda_2;结果为1;}
注意:lambda表达式捕获方式有两种,分别是值捕获和引用捕获。func_lambda_2是值捕获。采用拷贝的方式传入lambda表达式,与参数不同的是,被捕获的变量在lambda创建时拷贝变量,而不是在调用时拷贝变量。
例子3:
void func_3(){ int a=1; auto func_lambda_3=[&a] () {const<<a<<" "<<endl;}; //使用引用捕获, a=10; //改变a的值 func_lambda_3(); /调用func_lambda_3,结果为10;}注意:采用引用捕获时必须保证在lambda执行时被捕获的变量是存在的。若一个函数返回一个lambda表达式,lambda引用函数的局部变量,函数结束时局部变量被清除,而返回的lambda对象还使用该变量,此时会产生错误。
例子3:
void func_3(){ int a=1; //局部变量 auto func_lambda_3=[a] () mutable {return ++a;}; //默认情况下,对于一个值被拷贝的变量,lambda不会改变其值,如果我们希望能改变一个被捕获的变量的值,就必须加上关键字mutable。 a=10;; func_lambda_3(); } //所以可变lambda可以省略参数列表
//
阅读全文
0 0
- C++ Lambda函数(匿名函数) 使用方法
- 匿名函数(lambda)
- Lambda 函数 (匿名函数)
- lambda函数,匿名函数
- Python 匿名(lambda)函数
- 【C#】之匿名函数及Lambda表达式
- C/C++匿名函数(Lambda)表达式
- C#lambda表达式和匿名函数
- C++11 Lambda函数(匿名函数)
- C++11 Lambda函数(匿名函数)
- C++11:Lambda函数(匿名函数)
- Python lambda(匿名函数)函数总结
- python 匿名函数lambda
- 匿名函数 & Lambda 表达式
- Python 匿名函数lambda
- lambda匿名函数
- python 匿名函数lambda
- Python Lambda 匿名函数
- WebSocket 是什么原理?为什么可以实现持久连接?
- 苹果机之远程操作 | 隔空重启手机
- 【OpenStack源码分析之十一】分布式事务和相关算法
- Conquer a New Region HDU
- ubuntu16.04 LAMP安装
- C++ Lambda函数(匿名函数) 使用方法
- bootstrap
- 轻松应对IDC机房带宽突然暴涨问题(链接)
- 2017多校联合第一场 1002题 hdu 6034 Balala Power!
- 水了一天终于开始讲Java相关的内容
- win10上安装mysql5.7
- 安装matlab7遇到的问题
- Java面向对象入门讲解(深入浅出)
- 理解angular中的module和injector,即依赖注入